capibara 1.3.52 → 1.3.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -103,7 +103,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
|
103
103
|
/*! no static exports found */
|
|
104
104
|
/***/ (function(module, exports, __webpack_require__) {
|
|
105
105
|
|
|
106
|
-
eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.push([module.i, \"@import url(https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;0,900;1,300;1,400;1,500;1,700;1,900&display=swap);\"]);\n// Module\nexports.push([module.i, \":root{--header-top-height:40px;--header-height:98px;--header-labels-height:50px;--header-day-height:24px;--ex-header-height:120px;--header-input-height:20px;--nav-width:200px;--nav-item-col-width:60px;--initial-nav-width:0px;--ex-nav-width:0px;--btn-nav-width:117px;--nav-right-width:300px;--item-min-width:100px;--item-height:45px;--day-width:45px;--font-size:16px;--mobile-footer-height:50px}@-webkit-keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@-webkit-keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@-webkit-keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@-webkit-keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}.capibara.c-red:not(.dark-theme){scrollbar-color:#df554b transparent}.capibara.c-red:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#df554b}.capibara.c-red:not(.dark-theme) .header-top{background:#fdfaf9}.capibara.c-red:not(.dark-theme) .corner{background:#fdfaf9;border-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header{background:#fdfaf9;border-bottom-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#fdfaf9)!important}.capibara.c-red:not(.dark-theme) nav.right{border-color:#f99d97}.capibara.c-red.dark-theme .header-top,.capibara.c-red.dark-theme nav.right{border-color:#ba160a}.capibara.c-red.dark-theme .container-tl header,.capibara.c-red.dark-theme .corner{border-bottom-color:#ba160a}.capibara.c-red.dark-theme ::-moz-selection,.capibara.c-red ::-moz-selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme ::selection,.capibara.c-red ::selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar,.capibara.c-red .progress-bar{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar:after,.capibara.c-red.dark-theme .progress-bar:before,.capibara.c-red .progress-bar:after,.capibara.c-red .progress-bar:before{background-color:#f44336!important}.capibara.c-red.dark-theme select.tabs-select,.capibara.c-red select.tabs-select{background-color:rgba(244,67,54,.7)!important;border-color:#f44336!important}.capibara.c-red.dark-theme .time,.capibara.c-red .time{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .time .symbol,.capibara.c-red .time .symbol{color:#f44336}.capibara.c-red.dark-theme .time input:active,.capibara.c-red.dark-theme .time input:focus,.capibara.c-red .time input:active,.capibara.c-red .time input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-box,.capibara.c-red.dark-theme .input-section select.input-select,.capibara.c-red .input-box,.capibara.c-red .input-section select.input-select{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section select.input-select:active,.capibara.c-red.dark-theme .input-section select.input-select:focus,.capibara.c-red .input-section select.input-select:active,.capibara.c-red .input-section select.input-select:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section .nav-input-file,.capibara.c-red.dark-theme .input-section input.nav-input,.capibara.c-red .input-section .nav-input-file,.capibara.c-red .input-section input.nav-input{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section .nav-input-file:active,.capibara.c-red.dark-theme .input-section .nav-input-file:focus,.capibara.c-red.dark-theme .input-section input.nav-input:active,.capibara.c-red.dark-theme .input-section input.nav-input:focus,.capibara.c-red .input-section .nav-input-file:active,.capibara.c-red .input-section .nav-input-file:focus,.capibara.c-red .input-section input.nav-input:active,.capibara.c-red .input-section input.nav-input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-red .input-section.msj-input-container textarea.msj{border:2px solid #f44336}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-red .input-section.msj-input-container textarea.msj:active,.capibara.c-red .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red .cap-btn-raised,.capibara.c-red.dark-theme .cap-btn-raised{border-color:#f44336;background:rgba(244,67,54,.8)}.capibara.c-red .cap-btn-outline,.capibara.c-red.dark-theme .cap-btn-outline{border-color:#f44336;color:#f44336}.capibara.c-red .cap-btn-outline.selected,.capibara.c-red.dark-theme .cap-btn-outline.selected{background:rgba(244,67,54,.8)}.capibara.c-red.dark-theme .select-container .selected-day,.capibara.c-red .select-container .selected-day{background:rgba(244,67,54,.3);box-shadow:inset 0 0 10px rgba(244,67,54,.5)}.capibara .c-red--background{background:#f44336!important}.capibara .c-red-d--background{background:#d2190b!important}.capibara .c-red-l--background{background:#f8877f!important}.capibara .c-red--text{color:#f44336!important}.capibara .c-red-d--text{color:#d2190b!important}.capibara .c-red-l--text{color:#f8877f!important}.capibara .detail-day .list-detail .item-detail.c-red{background:rgba(244,67,54,.2);border:1px solid #f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon{background:#f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon.outlined{border:1px solid #f44336;box-shadow:inset 0 0 0 1px rgba(244,67,54,.7)}.capibara .detail-day .list-detail .item-detail.c-red .name{color:#f44336}.capibara .float-box-container .float-box span.data.c-red{--local-color:#f44336;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-red,.capibara .float-box-container .float-box .dot.c-red,.capibara .float-box-container .float-box .rowdot--row.c-red .rowdot--dot{--local-color:#f44336}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active{background:rgba(244,67,54,.7);border-color:rgba(244,67,54,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active:hover{background:rgba(244,67,54,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-red:hover{background:rgba(244,67,54,.2);border-color:rgba(244,67,54,.9)}.capibara .input-box .mini-input-section--icon.c-red{background:#f44336}.capibara.c-pink:not(.dark-theme){scrollbar-color:#d0376b transparent}.capibara.c-pink:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#d0376b}.capibara.c-pink:not(.dark-theme) .header-top{background:#f0e3e7}.capibara.c-pink:not(.dark-theme) .corner{background:#f0e3e7;border-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header{background:#f0e3e7;border-bottom-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f0e3e7)!important}.capibara.c-pink:not(.dark-theme) nav.right{border-color:#f27ba3}.capibara.c-pink.dark-theme .header-top,.capibara.c-pink.dark-theme nav.right{border-color:#930e3b}.capibara.c-pink.dark-theme .container-tl header,.capibara.c-pink.dark-theme .corner{border-bottom-color:#930e3b}.capibara.c-pink.dark-theme ::-moz-selection,.capibara.c-pink ::-moz-selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme ::selection,.capibara.c-pink ::selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar,.capibara.c-pink .progress-bar{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar:after,.capibara.c-pink.dark-theme .progress-bar:before,.capibara.c-pink .progress-bar:after,.capibara.c-pink .progress-bar:before{background-color:#e91e63!important}.capibara.c-pink.dark-theme select.tabs-select,.capibara.c-pink select.tabs-select{background-color:rgba(233,30,99,.7)!important;border-color:#e91e63!important}.capibara.c-pink.dark-theme .time,.capibara.c-pink .time{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .time .symbol,.capibara.c-pink .time .symbol{color:#e91e63}.capibara.c-pink.dark-theme .time input:active,.capibara.c-pink.dark-theme .time input:focus,.capibara.c-pink .time input:active,.capibara.c-pink .time input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-box,.capibara.c-pink.dark-theme .input-section select.input-select,.capibara.c-pink .input-box,.capibara.c-pink .input-section select.input-select{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section select.input-select:active,.capibara.c-pink.dark-theme .input-section select.input-select:focus,.capibara.c-pink .input-section select.input-select:active,.capibara.c-pink .input-section select.input-select:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section .nav-input-file,.capibara.c-pink.dark-theme .input-section input.nav-input,.capibara.c-pink .input-section .nav-input-file,.capibara.c-pink .input-section input.nav-input{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section .nav-input-file:active,.capibara.c-pink.dark-theme .input-section .nav-input-file:focus,.capibara.c-pink.dark-theme .input-section input.nav-input:active,.capibara.c-pink.dark-theme .input-section input.nav-input:focus,.capibara.c-pink .input-section .nav-input-file:active,.capibara.c-pink .input-section .nav-input-file:focus,.capibara.c-pink .input-section input.nav-input:active,.capibara.c-pink .input-section input.nav-input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-pink .input-section.msj-input-container textarea.msj{border:2px solid #e91e63}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-pink .input-section.msj-input-container textarea.msj:active,.capibara.c-pink .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink .cap-btn-raised,.capibara.c-pink.dark-theme .cap-btn-raised{border-color:#e91e63;background:rgba(233,30,99,.8)}.capibara.c-pink .cap-btn-outline,.capibara.c-pink.dark-theme .cap-btn-outline{border-color:#e91e63;color:#e91e63}.capibara.c-pink .cap-btn-outline.selected,.capibara.c-pink.dark-theme .cap-btn-outline.selected{background:rgba(233,30,99,.8)}.capibara.c-pink.dark-theme .select-container .selected-day,.capibara.c-pink .select-container .selected-day{background:rgba(233,30,99,.3);box-shadow:inset 0 0 10px rgba(233,30,99,.5)}.capibara .c-pink--background{background:#e91e63!important}.capibara .c-pink-d--background{background:#aa1145!important}.capibara .c-pink-l--background{background:#f06493!important}.capibara .c-pink--text{color:#e91e63!important}.capibara .c-pink-d--text{color:#aa1145!important}.capibara .c-pink-l--text{color:#f06493!important}.capibara .detail-day .list-detail .item-detail.c-pink{background:rgba(233,30,99,.2);border:1px solid #e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon{background:#e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon.outlined{border:1px solid #e91e63;box-shadow:inset 0 0 0 1px rgba(233,30,99,.7)}.capibara .detail-day .list-detail .item-detail.c-pink .name{color:#e91e63}.capibara .float-box-container .float-box span.data.c-pink{--local-color:#e91e63;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-pink,.capibara .float-box-container .float-box .dot.c-pink,.capibara .float-box-container .float-box .rowdot--row.c-pink .rowdot--dot{--local-color:#e91e63}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active{background:rgba(233,30,99,.7);border-color:rgba(233,30,99,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active:hover{background:rgba(233,30,99,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink:hover{background:rgba(233,30,99,.2);border-color:rgba(233,30,99,.9)}.capibara .input-box .mini-input-section--icon.c-pink{background:#e91e63}.capibara.c-purple:not(.dark-theme){scrollbar-color:#8d3d9b transparent}.capibara.c-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#8d3d9b}.capibara.c-purple:not(.dark-theme) .header-top{background:#d6cbd8}.capibara.c-purple:not(.dark-theme) .corner{background:#d6cbd8;border-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header{background:#d6cbd8;border-bottom-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d6cbd8)!important}.capibara.c-purple:not(.dark-theme) nav.right{border-color:#ca61dc}.capibara.c-purple.dark-theme .header-top,.capibara.c-purple.dark-theme nav.right{border-color:#52145d}.capibara.c-purple.dark-theme .container-tl header,.capibara.c-purple.dark-theme .corner{border-bottom-color:#52145d}.capibara.c-purple.dark-theme ::-moz-selection,.capibara.c-purple ::-moz-selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme ::selection,.capibara.c-purple ::selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar,.capibara.c-purple .progress-bar{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar:after,.capibara.c-purple.dark-theme .progress-bar:before,.capibara.c-purple .progress-bar:after,.capibara.c-purple .progress-bar:before{background-color:#9c27b0!important}.capibara.c-purple.dark-theme select.tabs-select,.capibara.c-purple select.tabs-select{background-color:rgba(156,39,176,.7)!important;border-color:#9c27b0!important}.capibara.c-purple.dark-theme .time,.capibara.c-purple .time{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .time .symbol,.capibara.c-purple .time .symbol{color:#9c27b0}.capibara.c-purple.dark-theme .time input:active,.capibara.c-purple.dark-theme .time input:focus,.capibara.c-purple .time input:active,.capibara.c-purple .time input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-box,.capibara.c-purple.dark-theme .input-section select.input-select,.capibara.c-purple .input-box,.capibara.c-purple .input-section select.input-select{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section select.input-select:active,.capibara.c-purple.dark-theme .input-section select.input-select:focus,.capibara.c-purple .input-section select.input-select:active,.capibara.c-purple .input-section select.input-select:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section .nav-input-file,.capibara.c-purple.dark-theme .input-section input.nav-input,.capibara.c-purple .input-section .nav-input-file,.capibara.c-purple .input-section input.nav-input{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-purple.dark-theme .input-section input.nav-input:active,.capibara.c-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-purple .input-section .nav-input-file:active,.capibara.c-purple .input-section .nav-input-file:focus,.capibara.c-purple .input-section input.nav-input:active,.capibara.c-purple .input-section input.nav-input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-purple .input-section.msj-input-container textarea.msj{border:2px solid #9c27b0}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple .cap-btn-raised,.capibara.c-purple.dark-theme .cap-btn-raised{border-color:#9c27b0;background:rgba(156,39,176,.8)}.capibara.c-purple .cap-btn-outline,.capibara.c-purple.dark-theme .cap-btn-outline{border-color:#9c27b0;color:#9c27b0}.capibara.c-purple .cap-btn-outline.selected,.capibara.c-purple.dark-theme .cap-btn-outline.selected{background:rgba(156,39,176,.8)}.capibara.c-purple.dark-theme .select-container .selected-day,.capibara.c-purple .select-container .selected-day{background:rgba(156,39,176,.3);box-shadow:inset 0 0 10px rgba(156,39,176,.5)}.capibara .c-purple--background{background:#9c27b0!important}.capibara .c-purple-d--background{background:#641971!important}.capibara .c-purple-l--background{background:#c34cd7!important}.capibara .c-purple--text{color:#9c27b0!important}.capibara .c-purple-d--text{color:#641971!important}.capibara .c-purple-l--text{color:#c34cd7!important}.capibara .detail-day .list-detail .item-detail.c-purple{background:rgba(156,39,176,.2);border:1px solid #9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon{background:#9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon.outlined{border:1px solid #9c27b0;box-shadow:inset 0 0 0 1px rgba(156,39,176,.7)}.capibara .detail-day .list-detail .item-detail.c-purple .name{color:#9c27b0}.capibara .float-box-container .float-box span.data.c-purple{--local-color:#9c27b0;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-purple,.capibara .float-box-container .float-box .dot.c-purple,.capibara .float-box-container .float-box .rowdot--row.c-purple .rowdot--dot{--local-color:#9c27b0}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active{background:rgba(156,39,176,.7);border-color:rgba(156,39,176,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active:hover{background:rgba(156,39,176,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple:hover{background:rgba(156,39,176,.2);border-color:rgba(156,39,176,.9)}.capibara .input-box .mini-input-section--icon.c-purple{background:#9c27b0}.capibara.c-deep-purple:not(.dark-theme){scrollbar-color:#6e529f transparent}.capibara.c-deep-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#6e529f}.capibara.c-deep-purple:not(.dark-theme) .header-top{background:#dededf}.capibara.c-deep-purple:not(.dark-theme) .corner{background:#dededf;border-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header{background:#dededf;border-bottom-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dededf)!important}.capibara.c-deep-purple:not(.dark-theme) nav.right{border-color:#9f80d7}.capibara.c-deep-purple.dark-theme .header-top,.capibara.c-deep-purple.dark-theme nav.right{border-color:#3b216a}.capibara.c-deep-purple.dark-theme .container-tl header,.capibara.c-deep-purple.dark-theme .corner{border-bottom-color:#3b216a}.capibara.c-deep-purple.dark-theme ::-moz-selection,.capibara.c-deep-purple ::-moz-selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme ::selection,.capibara.c-deep-purple ::selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar,.capibara.c-deep-purple .progress-bar{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar:after,.capibara.c-deep-purple.dark-theme .progress-bar:before,.capibara.c-deep-purple .progress-bar:after,.capibara.c-deep-purple .progress-bar:before{background-color:#673ab7!important}.capibara.c-deep-purple.dark-theme select.tabs-select,.capibara.c-deep-purple select.tabs-select{background-color:rgba(103,58,183,.7)!important;border-color:#673ab7!important}.capibara.c-deep-purple.dark-theme .time,.capibara.c-deep-purple .time{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .time .symbol,.capibara.c-deep-purple .time .symbol{color:#673ab7}.capibara.c-deep-purple.dark-theme .time input:active,.capibara.c-deep-purple.dark-theme .time input:focus,.capibara.c-deep-purple .time input:active,.capibara.c-deep-purple .time input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-box,.capibara.c-deep-purple.dark-theme .input-section select.input-select,.capibara.c-deep-purple .input-box,.capibara.c-deep-purple .input-section select.input-select{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section select.input-select:active,.capibara.c-deep-purple.dark-theme .input-section select.input-select:focus,.capibara.c-deep-purple .input-section select.input-select:active,.capibara.c-deep-purple .input-section select.input-select:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file,.capibara.c-deep-purple.dark-theme .input-section input.nav-input,.capibara.c-deep-purple .input-section .nav-input-file,.capibara.c-deep-purple .input-section input.nav-input{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:active,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-purple .input-section .nav-input-file:active,.capibara.c-deep-purple .input-section .nav-input-file:focus,.capibara.c-deep-purple .input-section input.nav-input:active,.capibara.c-deep-purple .input-section input.nav-input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj{border:2px solid #673ab7}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple .cap-btn-raised,.capibara.c-deep-purple.dark-theme .cap-btn-raised{border-color:#673ab7;background:rgba(103,58,183,.8)}.capibara.c-deep-purple .cap-btn-outline,.capibara.c-deep-purple.dark-theme .cap-btn-outline{border-color:#673ab7;color:#673ab7}.capibara.c-deep-purple .cap-btn-outline.selected,.capibara.c-deep-purple.dark-theme .cap-btn-outline.selected{background:rgba(103,58,183,.8)}.capibara.c-deep-purple.dark-theme .select-container .selected-day,.capibara.c-deep-purple .select-container .selected-day{background:rgba(103,58,183,.3);box-shadow:inset 0 0 10px rgba(103,58,183,.5)}.capibara .c-deep-purple--background{background:#673ab7!important}.capibara .c-deep-purple-d--background{background:#46287d!important}.capibara .c-deep-purple-l--background{background:#916dd1!important}.capibara .c-deep-purple--text{color:#673ab7!important}.capibara .c-deep-purple-d--text{color:#46287d!important}.capibara .c-deep-purple-l--text{color:#916dd1!important}.capibara .detail-day .list-detail .item-detail.c-deep-purple{background:rgba(103,58,183,.2);border:1px solid #673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon{background:#673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon.outlined{border:1px solid #673ab7;box-shadow:inset 0 0 0 1px rgba(103,58,183,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-purple .name{color:#673ab7}.capibara .float-box-container .float-box span.data.c-deep-purple{--local-color:#673ab7;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-purple,.capibara .float-box-container .float-box .dot.c-deep-purple,.capibara .float-box-container .float-box .rowdot--row.c-deep-purple .rowdot--dot{--local-color:#673ab7}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active{background:rgba(103,58,183,.7);border-color:rgba(103,58,183,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active:hover{background:rgba(103,58,183,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple:hover{background:rgba(103,58,183,.2);border-color:rgba(103,58,183,.9)}.capibara .input-box .mini-input-section--icon.c-deep-purple{background:#673ab7}.capibara.c-indigo:not(.dark-theme){scrollbar-color:#57629d transparent}.capibara.c-indigo:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#57629d}.capibara.c-indigo:not(.dark-theme) .header-top{background:#e0e0e0}.capibara.c-indigo:not(.dark-theme) .corner{background:#e0e0e0;border-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header{background:#e0e0e0;border-bottom-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#e0e0e0)!important}.capibara.c-indigo:not(.dark-theme) nav.right{border-color:#8591d5}.capibara.c-indigo.dark-theme .header-top,.capibara.c-indigo.dark-theme nav.right{border-color:#252f69}.capibara.c-indigo.dark-theme .container-tl header,.capibara.c-indigo.dark-theme .corner{border-bottom-color:#252f69}.capibara.c-indigo.dark-theme ::-moz-selection,.capibara.c-indigo ::-moz-selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme ::selection,.capibara.c-indigo ::selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar,.capibara.c-indigo .progress-bar{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar:after,.capibara.c-indigo.dark-theme .progress-bar:before,.capibara.c-indigo .progress-bar:after,.capibara.c-indigo .progress-bar:before{background-color:#3f51b5!important}.capibara.c-indigo.dark-theme select.tabs-select,.capibara.c-indigo select.tabs-select{background-color:rgba(63,81,181,.7)!important;border-color:#3f51b5!important}.capibara.c-indigo.dark-theme .time,.capibara.c-indigo .time{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .time .symbol,.capibara.c-indigo .time .symbol{color:#3f51b5}.capibara.c-indigo.dark-theme .time input:active,.capibara.c-indigo.dark-theme .time input:focus,.capibara.c-indigo .time input:active,.capibara.c-indigo .time input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-box,.capibara.c-indigo.dark-theme .input-section select.input-select,.capibara.c-indigo .input-box,.capibara.c-indigo .input-section select.input-select{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section select.input-select:active,.capibara.c-indigo.dark-theme .input-section select.input-select:focus,.capibara.c-indigo .input-section select.input-select:active,.capibara.c-indigo .input-section select.input-select:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section .nav-input-file,.capibara.c-indigo.dark-theme .input-section input.nav-input,.capibara.c-indigo .input-section .nav-input-file,.capibara.c-indigo .input-section input.nav-input{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section .nav-input-file:active,.capibara.c-indigo.dark-theme .input-section .nav-input-file:focus,.capibara.c-indigo.dark-theme .input-section input.nav-input:active,.capibara.c-indigo.dark-theme .input-section input.nav-input:focus,.capibara.c-indigo .input-section .nav-input-file:active,.capibara.c-indigo .input-section .nav-input-file:focus,.capibara.c-indigo .input-section input.nav-input:active,.capibara.c-indigo .input-section input.nav-input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-indigo .input-section.msj-input-container textarea.msj{border:2px solid #3f51b5}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-indigo .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo .cap-btn-raised,.capibara.c-indigo.dark-theme .cap-btn-raised{border-color:#3f51b5;background:rgba(63,81,181,.8)}.capibara.c-indigo .cap-btn-outline,.capibara.c-indigo.dark-theme .cap-btn-outline{border-color:#3f51b5;color:#3f51b5}.capibara.c-indigo .cap-btn-outline.selected,.capibara.c-indigo.dark-theme .cap-btn-outline.selected{background:rgba(63,81,181,.8)}.capibara.c-indigo.dark-theme .select-container .selected-day,.capibara.c-indigo .select-container .selected-day{background:rgba(63,81,181,.3);box-shadow:inset 0 0 10px rgba(63,81,181,.5)}.capibara .c-indigo--background{background:#3f51b5!important}.capibara .c-indigo-d--background{background:#2b387c!important}.capibara .c-indigo-l--background{background:#7280ce!important}.capibara .c-indigo--text{color:#3f51b5!important}.capibara .c-indigo-d--text{color:#2b387c!important}.capibara .c-indigo-l--text{color:#7280ce!important}.capibara .detail-day .list-detail .item-detail.c-indigo{background:rgba(63,81,181,.2);border:1px solid #3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon{background:#3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon.outlined{border:1px solid #3f51b5;box-shadow:inset 0 0 0 1px rgba(63,81,181,.7)}.capibara .detail-day .list-detail .item-detail.c-indigo .name{color:#3f51b5}.capibara .float-box-container .float-box span.data.c-indigo{--local-color:#3f51b5;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-indigo,.capibara .float-box-container .float-box .dot.c-indigo,.capibara .float-box-container .float-box .rowdot--row.c-indigo .rowdot--dot{--local-color:#3f51b5}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active{background:rgba(63,81,181,.7);border-color:rgba(63,81,181,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active:hover{background:rgba(63,81,181,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo:hover{background:rgba(63,81,181,.2);border-color:rgba(63,81,181,.9)}.capibara .input-box .mini-input-section--icon.c-indigo{background:#3f51b5}.capibara.c-blue:not(.dark-theme){scrollbar-color:#3176bb transparent}.capibara.c-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3176bb}.capibara.c-blue:not(.dark-theme) .header-top{background:#d1dce6}.capibara.c-blue:not(.dark-theme) .corner{background:#d1dce6;border-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header{background:#d1dce6;border-bottom-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d1dce6)!important}.capibara.c-blue:not(.dark-theme) nav.right{border-color:#64a9ed}.capibara.c-blue.dark-theme .header-top,.capibara.c-blue.dark-theme nav.right{border-color:#0e4377}.capibara.c-blue.dark-theme .container-tl header,.capibara.c-blue.dark-theme .corner{border-bottom-color:#0e4377}.capibara.c-blue.dark-theme ::-moz-selection,.capibara.c-blue ::-moz-selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme ::selection,.capibara.c-blue ::selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar,.capibara.c-blue .progress-bar{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar:after,.capibara.c-blue.dark-theme .progress-bar:before,.capibara.c-blue .progress-bar:after,.capibara.c-blue .progress-bar:before{background-color:#1976d2!important}.capibara.c-blue.dark-theme select.tabs-select,.capibara.c-blue select.tabs-select{background-color:rgba(25,118,210,.7)!important;border-color:#1976d2!important}.capibara.c-blue.dark-theme .time,.capibara.c-blue .time{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .time .symbol,.capibara.c-blue .time .symbol{color:#1976d2}.capibara.c-blue.dark-theme .time input:active,.capibara.c-blue.dark-theme .time input:focus,.capibara.c-blue .time input:active,.capibara.c-blue .time input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-box,.capibara.c-blue.dark-theme .input-section select.input-select,.capibara.c-blue .input-box,.capibara.c-blue .input-section select.input-select{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section select.input-select:active,.capibara.c-blue.dark-theme .input-section select.input-select:focus,.capibara.c-blue .input-section select.input-select:active,.capibara.c-blue .input-section select.input-select:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section .nav-input-file,.capibara.c-blue.dark-theme .input-section input.nav-input,.capibara.c-blue .input-section .nav-input-file,.capibara.c-blue .input-section input.nav-input{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue.dark-theme .input-section input.nav-input:active,.capibara.c-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-blue .input-section .nav-input-file:active,.capibara.c-blue .input-section .nav-input-file:focus,.capibara.c-blue .input-section input.nav-input:active,.capibara.c-blue .input-section input.nav-input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue .input-section.msj-input-container textarea.msj{border:2px solid #1976d2}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue .cap-btn-raised,.capibara.c-blue.dark-theme .cap-btn-raised{border-color:#1976d2;background:rgba(25,118,210,.8)}.capibara.c-blue .cap-btn-outline,.capibara.c-blue.dark-theme .cap-btn-outline{border-color:#1976d2;color:#1976d2}.capibara.c-blue .cap-btn-outline.selected,.capibara.c-blue.dark-theme .cap-btn-outline.selected{background:rgba(25,118,210,.8)}.capibara.c-blue.dark-theme .select-container .selected-day,.capibara.c-blue .select-container .selected-day{background:rgba(25,118,210,.3);box-shadow:inset 0 0 10px rgba(25,118,210,.5)}.capibara .c-blue--background{background:#1976d2!important}.capibara .c-blue-d--background{background:#11508e!important}.capibara .c-blue-l--background{background:#4e9cea!important}.capibara .c-blue--text{color:#1976d2!important}.capibara .c-blue-d--text{color:#11508e!important}.capibara .c-blue-l--text{color:#4e9cea!important}.capibara .detail-day .list-detail .item-detail.c-blue{background:rgba(25,118,210,.2);border:1px solid #1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon{background:#1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon.outlined{border:1px solid #1976d2;box-shadow:inset 0 0 0 1px rgba(25,118,210,.7)}.capibara .detail-day .list-detail .item-detail.c-blue .name{color:#1976d2}.capibara .float-box-container .float-box span.data.c-blue{--local-color:#1976d2;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue,.capibara .float-box-container .float-box .dot.c-blue,.capibara .float-box-container .float-box .rowdot--row.c-blue .rowdot--dot{--local-color:#1976d2}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active{background:rgba(25,118,210,.7);border-color:rgba(25,118,210,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active:hover{background:rgba(25,118,210,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue:hover{background:rgba(25,118,210,.2);border-color:rgba(25,118,210,.9)}.capibara .input-box .mini-input-section--icon.c-blue{background:#1976d2}.capibara.c-light-blue:not(.dark-theme){scrollbar-color:#1ca0db transparent}.capibara.c-light-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#1ca0db}.capibara.c-light-blue:not(.dark-theme) .header-top{background:#d3e7f0}.capibara.c-light-blue:not(.dark-theme) .corner{background:#d3e7f0;border-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header{background:#d3e7f0;border-bottom-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d3e7f0)!important}.capibara.c-light-blue:not(.dark-theme) nav.right{border-color:#60ccfd}.capibara.c-light-blue.dark-theme .header-top,.capibara.c-light-blue.dark-theme nav.right{border-color:#02638f}.capibara.c-light-blue.dark-theme .container-tl header,.capibara.c-light-blue.dark-theme .corner{border-bottom-color:#02638f}.capibara.c-light-blue.dark-theme ::-moz-selection,.capibara.c-light-blue ::-moz-selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme ::selection,.capibara.c-light-blue ::selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar,.capibara.c-light-blue .progress-bar{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar:after,.capibara.c-light-blue.dark-theme .progress-bar:before,.capibara.c-light-blue .progress-bar:after,.capibara.c-light-blue .progress-bar:before{background-color:#03a9f4!important}.capibara.c-light-blue.dark-theme select.tabs-select,.capibara.c-light-blue select.tabs-select{background-color:rgba(3,169,244,.7)!important;border-color:#03a9f4!important}.capibara.c-light-blue.dark-theme .time,.capibara.c-light-blue .time{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .time .symbol,.capibara.c-light-blue .time .symbol{color:#03a9f4}.capibara.c-light-blue.dark-theme .time input:active,.capibara.c-light-blue.dark-theme .time input:focus,.capibara.c-light-blue .time input:active,.capibara.c-light-blue .time input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-box,.capibara.c-light-blue.dark-theme .input-section select.input-select,.capibara.c-light-blue .input-box,.capibara.c-light-blue .input-section select.input-select{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section select.input-select:active,.capibara.c-light-blue.dark-theme .input-section select.input-select:focus,.capibara.c-light-blue .input-section select.input-select:active,.capibara.c-light-blue .input-section select.input-select:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file,.capibara.c-light-blue.dark-theme .input-section input.nav-input,.capibara.c-light-blue .input-section .nav-input-file,.capibara.c-light-blue .input-section input.nav-input{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-light-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-blue.dark-theme .input-section input.nav-input:active,.capibara.c-light-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-light-blue .input-section .nav-input-file:active,.capibara.c-light-blue .input-section .nav-input-file:focus,.capibara.c-light-blue .input-section input.nav-input:active,.capibara.c-light-blue .input-section input.nav-input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-blue .input-section.msj-input-container textarea.msj{border:2px solid #03a9f4}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue .cap-btn-raised,.capibara.c-light-blue.dark-theme .cap-btn-raised{border-color:#03a9f4;background:rgba(3,169,244,.8)}.capibara.c-light-blue .cap-btn-outline,.capibara.c-light-blue.dark-theme .cap-btn-outline{border-color:#03a9f4;color:#03a9f4}.capibara.c-light-blue .cap-btn-outline.selected,.capibara.c-light-blue.dark-theme .cap-btn-outline.selected{background:rgba(3,169,244,.8)}.capibara.c-light-blue.dark-theme .select-container .selected-day,.capibara.c-light-blue .select-container .selected-day{background:rgba(3,169,244,.3);box-shadow:inset 0 0 10px rgba(3,169,244,.5)}.capibara .c-light-blue--background{background:#03a9f4!important}.capibara .c-light-blue-d--background{background:#0275a8!important}.capibara .c-light-blue-l--background{background:#47c4fd!important}.capibara .c-light-blue--text{color:#03a9f4!important}.capibara .c-light-blue-d--text{color:#0275a8!important}.capibara .c-light-blue-l--text{color:#47c4fd!important}.capibara .detail-day .list-detail .item-detail.c-light-blue{background:rgba(3,169,244,.2);border:1px solid #03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon{background:#03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon.outlined{border:1px solid #03a9f4;box-shadow:inset 0 0 0 1px rgba(3,169,244,.7)}.capibara .detail-day .list-detail .item-detail.c-light-blue .name{color:#03a9f4}.capibara .float-box-container .float-box span.data.c-light-blue{--local-color:#03a9f4;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-light-blue,.capibara .float-box-container .float-box .dot.c-light-blue,.capibara .float-box-container .float-box .rowdot--row.c-light-blue .rowdot--dot{--local-color:#03a9f4}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active{background:rgba(3,169,244,.7);border-color:rgba(3,169,244,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active:hover{background:rgba(3,169,244,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue:hover{background:rgba(3,169,244,.2);border-color:rgba(3,169,244,.9)}.capibara .input-box .mini-input-section--icon.c-light-blue{background:#03a9f4}.capibara.c-cyan:not(.dark-theme){scrollbar-color:#15acbf transparent}.capibara.c-cyan:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#15acbf}.capibara.c-cyan:not(.dark-theme) .header-top{background:#b9e2e8}.capibara.c-cyan:not(.dark-theme) .corner{background:#b9e2e8;border-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header{background:#b9e2e8;border-bottom-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#b9e2e8)!important}.capibara.c-cyan:not(.dark-theme) nav.right{border-color:#3be9ff}.capibara.c-cyan.dark-theme .header-top,.capibara.c-cyan.dark-theme nav.right{border-color:#00626e}.capibara.c-cyan.dark-theme .container-tl header,.capibara.c-cyan.dark-theme .corner{border-bottom-color:#00626e}.capibara.c-cyan.dark-theme ::-moz-selection,.capibara.c-cyan ::-moz-selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme ::selection,.capibara.c-cyan ::selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar,.capibara.c-cyan .progress-bar{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar:after,.capibara.c-cyan.dark-theme .progress-bar:before,.capibara.c-cyan .progress-bar:after,.capibara.c-cyan .progress-bar:before{background-color:#00bcd4!important}.capibara.c-cyan.dark-theme select.tabs-select,.capibara.c-cyan select.tabs-select{background-color:rgba(0,188,212,.7)!important;border-color:#00bcd4!important}.capibara.c-cyan.dark-theme .time,.capibara.c-cyan .time{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .time .symbol,.capibara.c-cyan .time .symbol{color:#00bcd4}.capibara.c-cyan.dark-theme .time input:active,.capibara.c-cyan.dark-theme .time input:focus,.capibara.c-cyan .time input:active,.capibara.c-cyan .time input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-box,.capibara.c-cyan.dark-theme .input-section select.input-select,.capibara.c-cyan .input-box,.capibara.c-cyan .input-section select.input-select{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section select.input-select:active,.capibara.c-cyan.dark-theme .input-section select.input-select:focus,.capibara.c-cyan .input-section select.input-select:active,.capibara.c-cyan .input-section select.input-select:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section .nav-input-file,.capibara.c-cyan.dark-theme .input-section input.nav-input,.capibara.c-cyan .input-section .nav-input-file,.capibara.c-cyan .input-section input.nav-input{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section .nav-input-file:active,.capibara.c-cyan.dark-theme .input-section .nav-input-file:focus,.capibara.c-cyan.dark-theme .input-section input.nav-input:active,.capibara.c-cyan.dark-theme .input-section input.nav-input:focus,.capibara.c-cyan .input-section .nav-input-file:active,.capibara.c-cyan .input-section .nav-input-file:focus,.capibara.c-cyan .input-section input.nav-input:active,.capibara.c-cyan .input-section input.nav-input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-cyan .input-section.msj-input-container textarea.msj{border:2px solid #00bcd4}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-cyan .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan .cap-btn-raised,.capibara.c-cyan.dark-theme .cap-btn-raised{border-color:#00bcd4;background:rgba(0,188,212,.8)}.capibara.c-cyan .cap-btn-outline,.capibara.c-cyan.dark-theme .cap-btn-outline{border-color:#00bcd4;color:#00bcd4}.capibara.c-cyan .cap-btn-outline.selected,.capibara.c-cyan.dark-theme .cap-btn-outline.selected{background:rgba(0,188,212,.8)}.capibara.c-cyan.dark-theme .select-container .selected-day,.capibara.c-cyan .select-container .selected-day{background:rgba(0,188,212,.3);box-shadow:inset 0 0 10px rgba(0,188,212,.5)}.capibara .c-cyan--background{background:#00bcd4!important}.capibara .c-cyan-d--background{background:#007888!important}.capibara .c-cyan-l--background{background:#22e6ff!important}.capibara .c-cyan--text{color:#00bcd4!important}.capibara .c-cyan-d--text{color:#007888!important}.capibara .c-cyan-l--text{color:#22e6ff!important}.capibara .detail-day .list-detail .item-detail.c-cyan{background:rgba(0,188,212,.2);border:1px solid #00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon{background:#00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon.outlined{border:1px solid #00bcd4;box-shadow:inset 0 0 0 1px rgba(0,188,212,.7)}.capibara .detail-day .list-detail .item-detail.c-cyan .name{color:#00bcd4}.capibara .float-box-container .float-box span.data.c-cyan{--local-color:#00bcd4;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-cyan,.capibara .float-box-container .float-box .dot.c-cyan,.capibara .float-box-container .float-box .rowdot--row.c-cyan .rowdot--dot{--local-color:#00bcd4}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active{background:rgba(0,188,212,.7);border-color:rgba(0,188,212,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active:hover{background:rgba(0,188,212,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan:hover{background:rgba(0,188,212,.2);border-color:rgba(0,188,212,.9)}.capibara .input-box .mini-input-section--icon.c-cyan{background:#00bcd4}.capibara.c-teal:not(.dark-theme){scrollbar-color:#0f877c transparent}.capibara.c-teal:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#0f877c}.capibara.c-teal:not(.dark-theme) .header-top{background:#8ad8d1}.capibara.c-teal:not(.dark-theme) .corner{background:#8ad8d1;border-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header{background:#8ad8d1;border-bottom-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#8ad8d1)!important}.capibara.c-teal:not(.dark-theme) nav.right{border-color:#00fce4}.capibara.c-teal.dark-theme .header-top,.capibara.c-teal.dark-theme nav.right{border-color:#00302c}.capibara.c-teal.dark-theme .container-tl header,.capibara.c-teal.dark-theme .corner{border-bottom-color:#00302c}.capibara.c-teal.dark-theme ::-moz-selection,.capibara.c-teal ::-moz-selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme ::selection,.capibara.c-teal ::selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar,.capibara.c-teal .progress-bar{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar:after,.capibara.c-teal.dark-theme .progress-bar:before,.capibara.c-teal .progress-bar:after,.capibara.c-teal .progress-bar:before{background-color:#009688!important}.capibara.c-teal.dark-theme select.tabs-select,.capibara.c-teal select.tabs-select{background-color:rgba(0,150,136,.7)!important;border-color:#009688!important}.capibara.c-teal.dark-theme .time,.capibara.c-teal .time{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .time .symbol,.capibara.c-teal .time .symbol{color:#009688}.capibara.c-teal.dark-theme .time input:active,.capibara.c-teal.dark-theme .time input:focus,.capibara.c-teal .time input:active,.capibara.c-teal .time input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-box,.capibara.c-teal.dark-theme .input-section select.input-select,.capibara.c-teal .input-box,.capibara.c-teal .input-section select.input-select{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section select.input-select:active,.capibara.c-teal.dark-theme .input-section select.input-select:focus,.capibara.c-teal .input-section select.input-select:active,.capibara.c-teal .input-section select.input-select:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section .nav-input-file,.capibara.c-teal.dark-theme .input-section input.nav-input,.capibara.c-teal .input-section .nav-input-file,.capibara.c-teal .input-section input.nav-input{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section .nav-input-file:active,.capibara.c-teal.dark-theme .input-section .nav-input-file:focus,.capibara.c-teal.dark-theme .input-section input.nav-input:active,.capibara.c-teal.dark-theme .input-section input.nav-input:focus,.capibara.c-teal .input-section .nav-input-file:active,.capibara.c-teal .input-section .nav-input-file:focus,.capibara.c-teal .input-section input.nav-input:active,.capibara.c-teal .input-section input.nav-input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-teal .input-section.msj-input-container textarea.msj{border:2px solid #009688}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-teal .input-section.msj-input-container textarea.msj:active,.capibara.c-teal .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal .cap-btn-raised,.capibara.c-teal.dark-theme .cap-btn-raised{border-color:#009688;background:rgba(0,150,136,.8)}.capibara.c-teal .cap-btn-outline,.capibara.c-teal.dark-theme .cap-btn-outline{border-color:#009688;color:#009688}.capibara.c-teal .cap-btn-outline.selected,.capibara.c-teal.dark-theme .cap-btn-outline.selected{background:rgba(0,150,136,.8)}.capibara.c-teal.dark-theme .select-container .selected-day,.capibara.c-teal .select-container .selected-day{background:rgba(0,150,136,.3);box-shadow:inset 0 0 10px rgba(0,150,136,.5)}.capibara .c-teal--background{background:#009688!important}.capibara .c-teal-d--background{background:#004a43!important}.capibara .c-teal-l--background{background:#00e3cd!important}.capibara .c-teal--text{color:#009688!important}.capibara .c-teal-d--text{color:#004a43!important}.capibara .c-teal-l--text{color:#00e3cd!important}.capibara .detail-day .list-detail .item-detail.c-teal{background:rgba(0,150,136,.2);border:1px solid #009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon{background:#009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon.outlined{border:1px solid #009688;box-shadow:inset 0 0 0 1px rgba(0,150,136,.7)}.capibara .detail-day .list-detail .item-detail.c-teal .name{color:#009688}.capibara .float-box-container .float-box span.data.c-teal{--local-color:#009688;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-teal,.capibara .float-box-container .float-box .dot.c-teal,.capibara .float-box-container .float-box .rowdot--row.c-teal .rowdot--dot{--local-color:#009688}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active{background:rgba(0,150,136,.7);border-color:rgba(0,150,136,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active:hover{background:rgba(0,150,136,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal:hover{background:rgba(0,150,136,.2);border-color:rgba(0,150,136,.9)}.capibara .input-box .mini-input-section--icon.c-teal{background:#009688}.capibara.c-green:not(.dark-theme){scrollbar-color:#3f6c41 transparent}.capibara.c-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3f6c41}.capibara.c-green:not(.dark-theme) .header-top{background:#bcbcbc}.capibara.c-green:not(.dark-theme) .corner{background:#bcbcbc;border-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header{background:#bcbcbc;border-bottom-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#bcbcbc)!important}.capibara.c-green:not(.dark-theme) nav.right{border-color:#52bf57}.capibara.c-green.dark-theme .header-top,.capibara.c-green.dark-theme nav.right{border-color:#133214}.capibara.c-green.dark-theme .container-tl header,.capibara.c-green.dark-theme .corner{border-bottom-color:#133214}.capibara.c-green.dark-theme ::-moz-selection,.capibara.c-green ::-moz-selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme ::selection,.capibara.c-green ::selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar,.capibara.c-green .progress-bar{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar:after,.capibara.c-green.dark-theme .progress-bar:before,.capibara.c-green .progress-bar:after,.capibara.c-green .progress-bar:before{background-color:#2e7d32!important}.capibara.c-green.dark-theme select.tabs-select,.capibara.c-green select.tabs-select{background-color:rgba(46,125,50,.7)!important;border-color:#2e7d32!important}.capibara.c-green.dark-theme .time,.capibara.c-green .time{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .time .symbol,.capibara.c-green .time .symbol{color:#2e7d32}.capibara.c-green.dark-theme .time input:active,.capibara.c-green.dark-theme .time input:focus,.capibara.c-green .time input:active,.capibara.c-green .time input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-box,.capibara.c-green.dark-theme .input-section select.input-select,.capibara.c-green .input-box,.capibara.c-green .input-section select.input-select{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section select.input-select:active,.capibara.c-green.dark-theme .input-section select.input-select:focus,.capibara.c-green .input-section select.input-select:active,.capibara.c-green .input-section select.input-select:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section .nav-input-file,.capibara.c-green.dark-theme .input-section input.nav-input,.capibara.c-green .input-section .nav-input-file,.capibara.c-green .input-section input.nav-input{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section .nav-input-file:active,.capibara.c-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-green.dark-theme .input-section input.nav-input:active,.capibara.c-green.dark-theme .input-section input.nav-input:focus,.capibara.c-green .input-section .nav-input-file:active,.capibara.c-green .input-section .nav-input-file:focus,.capibara.c-green .input-section input.nav-input:active,.capibara.c-green .input-section input.nav-input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-green .input-section.msj-input-container textarea.msj{border:2px solid #2e7d32}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-green .input-section.msj-input-container textarea.msj:active,.capibara.c-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green .cap-btn-raised,.capibara.c-green.dark-theme .cap-btn-raised{border-color:#2e7d32;background:rgba(46,125,50,.8)}.capibara.c-green .cap-btn-outline,.capibara.c-green.dark-theme .cap-btn-outline{border-color:#2e7d32;color:#2e7d32}.capibara.c-green .cap-btn-outline.selected,.capibara.c-green.dark-theme .cap-btn-outline.selected{background:rgba(46,125,50,.8)}.capibara.c-green.dark-theme .select-container .selected-day,.capibara.c-green .select-container .selected-day{background:rgba(46,125,50,.3);box-shadow:inset 0 0 10px rgba(46,125,50,.5)}.capibara .c-green--background{background:#2e7d32!important}.capibara .c-green-d--background{background:#19451c!important}.capibara .c-green-l--background{background:#43b548!important}.capibara .c-green--text{color:#2e7d32!important}.capibara .c-green-d--text{color:#19451c!important}.capibara .c-green-l--text{color:#43b548!important}.capibara .detail-day .list-detail .item-detail.c-green{background:rgba(46,125,50,.2);border:1px solid #2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon{background:#2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon.outlined{border:1px solid #2e7d32;box-shadow:inset 0 0 0 1px rgba(46,125,50,.7)}.capibara .detail-day .list-detail .item-detail.c-green .name{color:#2e7d32}.capibara .float-box-container .float-box span.data.c-green{--local-color:#2e7d32;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-green,.capibara .float-box-container .float-box .dot.c-green,.capibara .float-box-container .float-box .rowdot--row.c-green .rowdot--dot{--local-color:#2e7d32}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active{background:rgba(46,125,50,.7);border-color:rgba(46,125,50,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active:hover{background:rgba(46,125,50,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-green:hover{background:rgba(46,125,50,.2);border-color:rgba(46,125,50,.9)}.capibara .input-box .mini-input-section--icon.c-green{background:#2e7d32}.capibara.c-light-green:not(.dark-theme){scrollbar-color:#89ab62 transparent}.capibara.c-light-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#89ab62}.capibara.c-light-green:not(.dark-theme) .header-top{background:#ededec}.capibara.c-light-green:not(.dark-theme) .corner{background:#ededec;border-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header{background:#ededec;border-bottom-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ededec)!important}.capibara.c-light-green:not(.dark-theme) nav.right{border-color:#bcdc97}.capibara.c-light-green.dark-theme .header-top,.capibara.c-light-green.dark-theme nav.right{border-color:#577d2a}.capibara.c-light-green.dark-theme .container-tl header,.capibara.c-light-green.dark-theme .corner{border-bottom-color:#577d2a}.capibara.c-light-green.dark-theme ::-moz-selection,.capibara.c-light-green ::-moz-selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme ::selection,.capibara.c-light-green ::selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar,.capibara.c-light-green .progress-bar{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar:after,.capibara.c-light-green.dark-theme .progress-bar:before,.capibara.c-light-green .progress-bar:after,.capibara.c-light-green .progress-bar:before{background-color:#8bc34a!important}.capibara.c-light-green.dark-theme select.tabs-select,.capibara.c-light-green select.tabs-select{background-color:rgba(139,195,74,.7)!important;border-color:#8bc34a!important}.capibara.c-light-green.dark-theme .time,.capibara.c-light-green .time{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .time .symbol,.capibara.c-light-green .time .symbol{color:#8bc34a}.capibara.c-light-green.dark-theme .time input:active,.capibara.c-light-green.dark-theme .time input:focus,.capibara.c-light-green .time input:active,.capibara.c-light-green .time input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-box,.capibara.c-light-green.dark-theme .input-section select.input-select,.capibara.c-light-green .input-box,.capibara.c-light-green .input-section select.input-select{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section select.input-select:active,.capibara.c-light-green.dark-theme .input-section select.input-select:focus,.capibara.c-light-green .input-section select.input-select:active,.capibara.c-light-green .input-section select.input-select:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section .nav-input-file,.capibara.c-light-green.dark-theme .input-section input.nav-input,.capibara.c-light-green .input-section .nav-input-file,.capibara.c-light-green .input-section input.nav-input{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section .nav-input-file:active,.capibara.c-light-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-green.dark-theme .input-section input.nav-input:active,.capibara.c-light-green.dark-theme .input-section input.nav-input:focus,.capibara.c-light-green .input-section .nav-input-file:active,.capibara.c-light-green .input-section .nav-input-file:focus,.capibara.c-light-green .input-section input.nav-input:active,.capibara.c-light-green .input-section input.nav-input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-green .input-section.msj-input-container textarea.msj{border:2px solid #8bc34a}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-green .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green .cap-btn-raised,.capibara.c-light-green.dark-theme .cap-btn-raised{border-color:#8bc34a;background:rgba(139,195,74,.8)}.capibara.c-light-green .cap-btn-outline,.capibara.c-light-green.dark-theme .cap-btn-outline{border-color:#8bc34a;color:#8bc34a}.capibara.c-light-green .cap-btn-outline.selected,.capibara.c-light-green.dark-theme .cap-btn-outline.selected{background:rgba(139,195,74,.8)}.capibara.c-light-green.dark-theme .select-container .selected-day,.capibara.c-light-green .select-container .selected-day{background:rgba(139,195,74,.3);box-shadow:inset 0 0 10px rgba(139,195,74,.5)}.capibara .c-light-green--background{background:#8bc34a!important}.capibara .c-light-green-d--background{background:#649130!important}.capibara .c-light-green-l--background{background:#b0d683!important}.capibara .c-light-green--text{color:#8bc34a!important}.capibara .c-light-green-d--text{color:#649130!important}.capibara .c-light-green-l--text{color:#b0d683!important}.capibara .detail-day .list-detail .item-detail.c-light-green{background:rgba(139,195,74,.2);border:1px solid #8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon{background:#8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon.outlined{border:1px solid #8bc34a;box-shadow:inset 0 0 0 1px rgba(139,195,74,.7)}.capibara .detail-day .list-detail .item-detail.c-light-green .name{color:#8bc34a}.capibara .float-box-container .float-box span.data.c-light-green{--local-color:#8bc34a;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-light-green,.capibara .float-box-container .float-box .dot.c-light-green,.capibara .float-box-container .float-box .rowdot--row.c-light-green .rowdot--dot{--local-color:#8bc34a}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active{background:rgba(139,195,74,.7);border-color:rgba(139,195,74,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active:hover{background:rgba(139,195,74,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green:hover{background:rgba(139,195,74,.2);border-color:rgba(139,195,74,.9)}.capibara .input-box .mini-input-section--icon.c-light-green{background:#8bc34a}.capibara.c-lime:not(.dark-theme){scrollbar-color:#bac550 transparent}.capibara.c-lime:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#bac550}.capibara.c-lime:not(.dark-theme) .header-top{background:#f3f3ee}.capibara.c-lime:not(.dark-theme) .corner{background:#f3f3ee;border-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header{background:#f3f3ee;border-bottom-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f3f3ee)!important}.capibara.c-lime:not(.dark-theme) nav.right{border-color:#e3eb90}.capibara.c-lime.dark-theme .header-top,.capibara.c-lime.dark-theme nav.right{border-color:#89951a}.capibara.c-lime.dark-theme .container-tl header,.capibara.c-lime.dark-theme .corner{border-bottom-color:#89951a}.capibara.c-lime.dark-theme ::-moz-selection,.capibara.c-lime ::-moz-selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme ::selection,.capibara.c-lime ::selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar,.capibara.c-lime .progress-bar{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar:after,.capibara.c-lime.dark-theme .progress-bar:before,.capibara.c-lime .progress-bar:after,.capibara.c-lime .progress-bar:before{background-color:#cddc39!important}.capibara.c-lime.dark-theme select.tabs-select,.capibara.c-lime select.tabs-select{background-color:rgba(205,220,57,.7)!important;border-color:#cddc39!important}.capibara.c-lime.dark-theme .time,.capibara.c-lime .time{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .time .symbol,.capibara.c-lime .time .symbol{color:#cddc39}.capibara.c-lime.dark-theme .time input:active,.capibara.c-lime.dark-theme .time input:focus,.capibara.c-lime .time input:active,.capibara.c-lime .time input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-box,.capibara.c-lime.dark-theme .input-section select.input-select,.capibara.c-lime .input-box,.capibara.c-lime .input-section select.input-select{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section select.input-select:active,.capibara.c-lime.dark-theme .input-section select.input-select:focus,.capibara.c-lime .input-section select.input-select:active,.capibara.c-lime .input-section select.input-select:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section .nav-input-file,.capibara.c-lime.dark-theme .input-section input.nav-input,.capibara.c-lime .input-section .nav-input-file,.capibara.c-lime .input-section input.nav-input{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section .nav-input-file:active,.capibara.c-lime.dark-theme .input-section .nav-input-file:focus,.capibara.c-lime.dark-theme .input-section input.nav-input:active,.capibara.c-lime.dark-theme .input-section input.nav-input:focus,.capibara.c-lime .input-section .nav-input-file:active,.capibara.c-lime .input-section .nav-input-file:focus,.capibara.c-lime .input-section input.nav-input:active,.capibara.c-lime .input-section input.nav-input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-lime .input-section.msj-input-container textarea.msj{border:2px solid #cddc39}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-lime .input-section.msj-input-container textarea.msj:active,.capibara.c-lime .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime .cap-btn-raised,.capibara.c-lime.dark-theme .cap-btn-raised{border-color:#cddc39;background:rgba(205,220,57,.8)}.capibara.c-lime .cap-btn-outline,.capibara.c-lime.dark-theme .cap-btn-outline{border-color:#cddc39;color:#cddc39}.capibara.c-lime .cap-btn-outline.selected,.capibara.c-lime.dark-theme .cap-btn-outline.selected{background:rgba(205,220,57,.8)}.capibara.c-lime.dark-theme .select-container .selected-day,.capibara.c-lime .select-container .selected-day{background:rgba(205,220,57,.3);box-shadow:inset 0 0 10px rgba(205,220,57,.5)}.capibara .c-lime--background{background:#cddc39!important}.capibara .c-lime-d--background{background:#9daa1e!important}.capibara .c-lime-l--background{background:#dde77a!important}.capibara .c-lime--text{color:#cddc39!important}.capibara .c-lime-d--text{color:#9daa1e!important}.capibara .c-lime-l--text{color:#dde77a!important}.capibara .detail-day .list-detail .item-detail.c-lime{background:rgba(205,220,57,.2);border:1px solid #cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon{background:#cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon.outlined{border:1px solid #cddc39;box-shadow:inset 0 0 0 1px rgba(205,220,57,.7)}.capibara .detail-day .list-detail .item-detail.c-lime .name{color:#cddc39}.capibara .float-box-container .float-box span.data.c-lime{--local-color:#cddc39;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-lime,.capibara .float-box-container .float-box .dot.c-lime,.capibara .float-box-container .float-box .rowdot--row.c-lime .rowdot--dot{--local-color:#cddc39}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active{background:rgba(205,220,57,.7);border-color:rgba(205,220,57,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active:hover{background:rgba(205,220,57,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime:hover{background:rgba(205,220,57,.2);border-color:rgba(205,220,57,.9)}.capibara .input-box .mini-input-section--icon.c-lime{background:#cddc39}.capibara.c-yellow:not(.dark-theme){scrollbar-color:#bca24f transparent}.capibara.c-yellow:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#bca24f}.capibara.c-yellow:not(.dark-theme) .header-top{background:#eeede9}.capibara.c-yellow:not(.dark-theme) .corner{background:#eeede9;border-color:#e6d18b}.capibara.c-yellow:not(.dark-theme) .container-tl header{background:#eeede9;border-bottom-color:#e6d18b}.capibara.c-yellow:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#eeede9)!important}.capibara.c-yellow:not(.dark-theme) nav.right{border-color:#e6d18b}.capibara.c-yellow.dark-theme .header-top,.capibara.c-yellow.dark-theme nav.right{border-color:#886f1d}.capibara.c-yellow.dark-theme .container-tl header,.capibara.c-yellow.dark-theme .corner{border-bottom-color:#886f1d}.capibara.c-yellow.dark-theme ::-moz-selection,.capibara.c-yellow ::-moz-selection{background-color:rgba(212,175,55,.2)!important}.capibara.c-yellow.dark-theme ::selection,.capibara.c-yellow ::selection{background-color:rgba(212,175,55,.2)!important}.capibara.c-yellow.dark-theme .progress-bar,.capibara.c-yellow .progress-bar{background-color:rgba(212,175,55,.2)!important}.capibara.c-yellow.dark-theme .progress-bar:after,.capibara.c-yellow.dark-theme .progress-bar:before,.capibara.c-yellow .progress-bar:after,.capibara.c-yellow .progress-bar:before{background-color:#d4af37!important}.capibara.c-yellow.dark-theme select.tabs-select,.capibara.c-yellow select.tabs-select{background-color:rgba(212,175,55,.7)!important;border-color:#d4af37!important}.capibara.c-yellow.dark-theme .time,.capibara.c-yellow .time{border-color:rgba(212,175,55,.6)}.capibara.c-yellow.dark-theme .time .symbol,.capibara.c-yellow .time .symbol{color:#d4af37}.capibara.c-yellow.dark-theme .time input:active,.capibara.c-yellow.dark-theme .time input:focus,.capibara.c-yellow .time input:active,.capibara.c-yellow .time input:focus{border-color:#d4af37;box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow.dark-theme .input-box,.capibara.c-yellow.dark-theme .input-section select.input-select,.capibara.c-yellow .input-box,.capibara.c-yellow .input-section select.input-select{border-color:rgba(212,175,55,.6)}.capibara.c-yellow.dark-theme .input-section select.input-select:active,.capibara.c-yellow.dark-theme .input-section select.input-select:focus,.capibara.c-yellow .input-section select.input-select:active,.capibara.c-yellow .input-section select.input-select:focus{border-color:#d4af37;box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow.dark-theme .input-section .nav-input-file,.capibara.c-yellow.dark-theme .input-section input.nav-input,.capibara.c-yellow .input-section .nav-input-file,.capibara.c-yellow .input-section input.nav-input{border-color:rgba(212,175,55,.6)}.capibara.c-yellow.dark-theme .input-section .nav-input-file:active,.capibara.c-yellow.dark-theme .input-section .nav-input-file:focus,.capibara.c-yellow.dark-theme .input-section input.nav-input:active,.capibara.c-yellow.dark-theme .input-section input.nav-input:focus,.capibara.c-yellow .input-section .nav-input-file:active,.capibara.c-yellow .input-section .nav-input-file:focus,.capibara.c-yellow .input-section input.nav-input:active,.capibara.c-yellow .input-section input.nav-input:focus{border-color:#d4af37;box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-yellow .input-section.msj-input-container textarea.msj{border:2px solid #d4af37}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-yellow .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow .cap-btn-raised,.capibara.c-yellow.dark-theme .cap-btn-raised{border-color:#d4af37;background:rgba(212,175,55,.8)}.capibara.c-yellow .cap-btn-outline,.capibara.c-yellow.dark-theme .cap-btn-outline{border-color:#d4af37;color:#d4af37}.capibara.c-yellow .cap-btn-outline.selected,.capibara.c-yellow.dark-theme .cap-btn-outline.selected{background:rgba(212,175,55,.8)}.capibara.c-yellow.dark-theme .select-container .selected-day,.capibara.c-yellow .select-container .selected-day{background:rgba(212,175,55,.3);box-shadow:inset 0 0 10px rgba(212,175,55,.5)}.capibara .c-yellow--background{background:#d4af37!important}.capibara .c-yellow-d--background{background:#9d8022!important}.capibara .c-yellow-l--background{background:#e2c876!important}.capibara .c-yellow--text{color:#d4af37!important}.capibara .c-yellow-d--text{color:#9d8022!important}.capibara .c-yellow-l--text{color:#e2c876!important}.capibara .detail-day .list-detail .item-detail.c-yellow{background:rgba(212,175,55,.2);border:1px solid #d4af37}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon{background:#d4af37}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon.outlined{border:1px solid #d4af37;box-shadow:inset 0 0 0 1px rgba(212,175,55,.7)}.capibara .detail-day .list-detail .item-detail.c-yellow .name{color:#d4af37}.capibara .float-box-container .float-box span.data.c-yellow{--local-color:#d4af37;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-yellow,.capibara .float-box-container .float-box .dot.c-yellow,.capibara .float-box-container .float-box .rowdot--row.c-yellow .rowdot--dot{--local-color:#d4af37}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active{background:rgba(212,175,55,.7);border-color:rgba(212,175,55,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active:hover{background:rgba(212,175,55,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow:hover{background:rgba(212,175,55,.2);border-color:rgba(212,175,55,.9)}.capibara .input-box .mini-input-section--icon.c-yellow{background:#d4af37}.capibara.c-amber:not(.dark-theme){scrollbar-color:#e6b520 transparent}.capibara.c-amber:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6b520}.capibara.c-amber:not(.dark-theme) .header-top{background:#f4efde}.capibara.c-amber:not(.dark-theme) .corner{background:#f4efde;border-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header{background:#f4efde;border-bottom-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f4efde)!important}.capibara.c-amber:not(.dark-theme) nav.right{border-color:#ffdb6d}.capibara.c-amber.dark-theme .header-top,.capibara.c-amber.dark-theme nav.right{border-color:#a07800}.capibara.c-amber.dark-theme .container-tl header,.capibara.c-amber.dark-theme .corner{border-bottom-color:#a07800}.capibara.c-amber.dark-theme ::-moz-selection,.capibara.c-amber ::-moz-selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme ::selection,.capibara.c-amber ::selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar,.capibara.c-amber .progress-bar{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar:after,.capibara.c-amber.dark-theme .progress-bar:before,.capibara.c-amber .progress-bar:after,.capibara.c-amber .progress-bar:before{background-color:#ffc107!important}.capibara.c-amber.dark-theme select.tabs-select,.capibara.c-amber select.tabs-select{background-color:rgba(255,193,7,.7)!important;border-color:#ffc107!important}.capibara.c-amber.dark-theme .time,.capibara.c-amber .time{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .time .symbol,.capibara.c-amber .time .symbol{color:#ffc107}.capibara.c-amber.dark-theme .time input:active,.capibara.c-amber.dark-theme .time input:focus,.capibara.c-amber .time input:active,.capibara.c-amber .time input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-box,.capibara.c-amber.dark-theme .input-section select.input-select,.capibara.c-amber .input-box,.capibara.c-amber .input-section select.input-select{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section select.input-select:active,.capibara.c-amber.dark-theme .input-section select.input-select:focus,.capibara.c-amber .input-section select.input-select:active,.capibara.c-amber .input-section select.input-select:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section .nav-input-file,.capibara.c-amber.dark-theme .input-section input.nav-input,.capibara.c-amber .input-section .nav-input-file,.capibara.c-amber .input-section input.nav-input{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section .nav-input-file:active,.capibara.c-amber.dark-theme .input-section .nav-input-file:focus,.capibara.c-amber.dark-theme .input-section input.nav-input:active,.capibara.c-amber.dark-theme .input-section input.nav-input:focus,.capibara.c-amber .input-section .nav-input-file:active,.capibara.c-amber .input-section .nav-input-file:focus,.capibara.c-amber .input-section input.nav-input:active,.capibara.c-amber .input-section input.nav-input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-amber .input-section.msj-input-container textarea.msj{border:2px solid #ffc107}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-amber .input-section.msj-input-container textarea.msj:active,.capibara.c-amber .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber .cap-btn-raised,.capibara.c-amber.dark-theme .cap-btn-raised{border-color:#ffc107;background:rgba(255,193,7,.8)}.capibara.c-amber .cap-btn-outline,.capibara.c-amber.dark-theme .cap-btn-outline{border-color:#ffc107;color:#ffc107}.capibara.c-amber .cap-btn-outline.selected,.capibara.c-amber.dark-theme .cap-btn-outline.selected{background:rgba(255,193,7,.8)}.capibara.c-amber.dark-theme .select-container .selected-day,.capibara.c-amber .select-container .selected-day{background:rgba(255,193,7,.3);box-shadow:inset 0 0 10px rgba(255,193,7,.5)}.capibara .c-amber--background{background:#ffc107!important}.capibara .c-amber-d--background{background:#ba8b00!important}.capibara .c-amber-l--background{background:#ffd454!important}.capibara .c-amber--text{color:#ffc107!important}.capibara .c-amber-d--text{color:#ba8b00!important}.capibara .c-amber-l--text{color:#ffd454!important}.capibara .detail-day .list-detail .item-detail.c-amber{background:rgba(255,193,7,.2);border:1px solid #ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon{background:#ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon.outlined{border:1px solid #ffc107;box-shadow:inset 0 0 0 1px rgba(255,193,7,.7)}.capibara .detail-day .list-detail .item-detail.c-amber .name{color:#ffc107}.capibara .float-box-container .float-box span.data.c-amber{--local-color:#ffc107;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-amber,.capibara .float-box-container .float-box .dot.c-amber,.capibara .float-box-container .float-box .rowdot--row.c-amber .rowdot--dot{--local-color:#ffc107}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active{background:rgba(255,193,7,.7);border-color:rgba(255,193,7,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active:hover{background:rgba(255,193,7,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber:hover{background:rgba(255,193,7,.2);border-color:rgba(255,193,7,.9)}.capibara .input-box .mini-input-section--icon.c-amber{background:#ffc107}.capibara.c-orange:not(.dark-theme){scrollbar-color:#e6931a transparent}.capibara.c-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6931a}.capibara.c-orange:not(.dark-theme) .header-top{background:#f2e8d9}.capibara.c-orange:not(.dark-theme) .corner{background:#f2e8d9;border-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header{background:#f2e8d9;border-bottom-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f2e8d9)!important}.capibara.c-orange:not(.dark-theme) nav.right{border-color:#ffc166}.capibara.c-orange.dark-theme .header-top,.capibara.c-orange.dark-theme nav.right{border-color:#995b00}.capibara.c-orange.dark-theme .container-tl header,.capibara.c-orange.dark-theme .corner{border-bottom-color:#995b00}.capibara.c-orange.dark-theme ::-moz-selection,.capibara.c-orange ::-moz-selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme ::selection,.capibara.c-orange ::selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar,.capibara.c-orange .progress-bar{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar:after,.capibara.c-orange.dark-theme .progress-bar:before,.capibara.c-orange .progress-bar:after,.capibara.c-orange .progress-bar:before{background-color:#ff9800!important}.capibara.c-orange.dark-theme select.tabs-select,.capibara.c-orange select.tabs-select{background-color:rgba(255,152,0,.7)!important;border-color:#ff9800!important}.capibara.c-orange.dark-theme .time,.capibara.c-orange .time{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .time .symbol,.capibara.c-orange .time .symbol{color:#ff9800}.capibara.c-orange.dark-theme .time input:active,.capibara.c-orange.dark-theme .time input:focus,.capibara.c-orange .time input:active,.capibara.c-orange .time input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-box,.capibara.c-orange.dark-theme .input-section select.input-select,.capibara.c-orange .input-box,.capibara.c-orange .input-section select.input-select{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section select.input-select:active,.capibara.c-orange.dark-theme .input-section select.input-select:focus,.capibara.c-orange .input-section select.input-select:active,.capibara.c-orange .input-section select.input-select:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section .nav-input-file,.capibara.c-orange.dark-theme .input-section input.nav-input,.capibara.c-orange .input-section .nav-input-file,.capibara.c-orange .input-section input.nav-input{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-orange.dark-theme .input-section input.nav-input:active,.capibara.c-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-orange .input-section .nav-input-file:active,.capibara.c-orange .input-section .nav-input-file:focus,.capibara.c-orange .input-section input.nav-input:active,.capibara.c-orange .input-section input.nav-input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-orange .input-section.msj-input-container textarea.msj{border:2px solid #ff9800}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange .cap-btn-raised,.capibara.c-orange.dark-theme .cap-btn-raised{border-color:#ff9800;background:rgba(255,152,0,.8)}.capibara.c-orange .cap-btn-outline,.capibara.c-orange.dark-theme .cap-btn-outline{border-color:#ff9800;color:#ff9800}.capibara.c-orange .cap-btn-outline.selected,.capibara.c-orange.dark-theme .cap-btn-outline.selected{background:rgba(255,152,0,.8)}.capibara.c-orange.dark-theme .select-container .selected-day,.capibara.c-orange .select-container .selected-day{background:rgba(255,152,0,.3);box-shadow:inset 0 0 10px rgba(255,152,0,.5)}.capibara .c-orange--background{background:#ff9800!important}.capibara .c-orange-d--background{background:#b36a00!important}.capibara .c-orange-l--background{background:#ffb74d!important}.capibara .c-orange--text{color:#ff9800!important}.capibara .c-orange-d--text{color:#b36a00!important}.capibara .c-orange-l--text{color:#ffb74d!important}.capibara .detail-day .list-detail .item-detail.c-orange{background:rgba(255,152,0,.2);border:1px solid #ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon{background:#ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon.outlined{border:1px solid #ff9800;box-shadow:inset 0 0 0 1px rgba(255,152,0,.7)}.capibara .detail-day .list-detail .item-detail.c-orange .name{color:#ff9800}.capibara .float-box-container .float-box span.data.c-orange{--local-color:#ff9800;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-orange,.capibara .float-box-container .float-box .dot.c-orange,.capibara .float-box-container .float-box .rowdot--row.c-orange .rowdot--dot{--local-color:#ff9800}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active{background:rgba(255,152,0,.7);border-color:rgba(255,152,0,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active:hover{background:rgba(255,152,0,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange:hover{background:rgba(255,152,0,.2);border-color:rgba(255,152,0,.9)}.capibara .input-box .mini-input-section--icon.c-orange{background:#ff9800}.capibara.c-deep-orange:not(.dark-theme){scrollbar-color:#cd5733 transparent}.capibara.c-deep-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#cd5733}.capibara.c-deep-orange:not(.dark-theme) .header-top{background:#ede1de}.capibara.c-deep-orange:not(.dark-theme) .corner{background:#ede1de;border-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header{background:#ede1de;border-bottom-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ede1de)!important}.capibara.c-deep-orange:not(.dark-theme) nav.right{border-color:#f09275}.capibara.c-deep-orange.dark-theme .header-top,.capibara.c-deep-orange.dark-theme nav.right{border-color:#8a2c0f}.capibara.c-deep-orange.dark-theme .container-tl header,.capibara.c-deep-orange.dark-theme .corner{border-bottom-color:#8a2c0f}.capibara.c-deep-orange.dark-theme ::-moz-selection,.capibara.c-deep-orange ::-moz-selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme ::selection,.capibara.c-deep-orange ::selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar,.capibara.c-deep-orange .progress-bar{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar:after,.capibara.c-deep-orange.dark-theme .progress-bar:before,.capibara.c-deep-orange .progress-bar:after,.capibara.c-deep-orange .progress-bar:before{background-color:#e64a19!important}.capibara.c-deep-orange.dark-theme select.tabs-select,.capibara.c-deep-orange select.tabs-select{background-color:rgba(230,74,25,.7)!important;border-color:#e64a19!important}.capibara.c-deep-orange.dark-theme .time,.capibara.c-deep-orange .time{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .time .symbol,.capibara.c-deep-orange .time .symbol{color:#e64a19}.capibara.c-deep-orange.dark-theme .time input:active,.capibara.c-deep-orange.dark-theme .time input:focus,.capibara.c-deep-orange .time input:active,.capibara.c-deep-orange .time input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-box,.capibara.c-deep-orange.dark-theme .input-section select.input-select,.capibara.c-deep-orange .input-box,.capibara.c-deep-orange .input-section select.input-select{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section select.input-select:active,.capibara.c-deep-orange.dark-theme .input-section select.input-select:focus,.capibara.c-deep-orange .input-section select.input-select:active,.capibara.c-deep-orange .input-section select.input-select:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file,.capibara.c-deep-orange.dark-theme .input-section input.nav-input,.capibara.c-deep-orange .input-section .nav-input-file,.capibara.c-deep-orange .input-section input.nav-input{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:active,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-orange .input-section .nav-input-file:active,.capibara.c-deep-orange .input-section .nav-input-file:focus,.capibara.c-deep-orange .input-section input.nav-input:active,.capibara.c-deep-orange .input-section input.nav-input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj{border:2px solid #e64a19}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange .cap-btn-raised,.capibara.c-deep-orange.dark-theme .cap-btn-raised{border-color:#e64a19;background:rgba(230,74,25,.8)}.capibara.c-deep-orange .cap-btn-outline,.capibara.c-deep-orange.dark-theme .cap-btn-outline{border-color:#e64a19;color:#e64a19}.capibara.c-deep-orange .cap-btn-outline.selected,.capibara.c-deep-orange.dark-theme .cap-btn-outline.selected{background:rgba(230,74,25,.8)}.capibara.c-deep-orange.dark-theme .select-container .selected-day,.capibara.c-deep-orange .select-container .selected-day{background:rgba(230,74,25,.3);box-shadow:inset 0 0 10px rgba(230,74,25,.5)}.capibara .c-deep-orange--background{background:#e64a19!important}.capibara .c-deep-orange-d--background{background:#a13412!important}.capibara .c-deep-orange-l--background{background:#ee805e!important}.capibara .c-deep-orange--text{color:#e64a19!important}.capibara .c-deep-orange-d--text{color:#a13412!important}.capibara .c-deep-orange-l--text{color:#ee805e!important}.capibara .detail-day .list-detail .item-detail.c-deep-orange{background:rgba(230,74,25,.2);border:1px solid #e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon{background:#e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon.outlined{border:1px solid #e64a19;box-shadow:inset 0 0 0 1px rgba(230,74,25,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-orange .name{color:#e64a19}.capibara .float-box-container .float-box span.data.c-deep-orange{--local-color:#e64a19;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-orange,.capibara .float-box-container .float-box .dot.c-deep-orange,.capibara .float-box-container .float-box .rowdot--row.c-deep-orange .rowdot--dot{--local-color:#e64a19}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active{background:rgba(230,74,25,.7);border-color:rgba(230,74,25,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active:hover{background:rgba(230,74,25,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange:hover{background:rgba(230,74,25,.2);border-color:rgba(230,74,25,.9)}.capibara .input-box .mini-input-section--icon.c-deep-orange{background:#e64a19}.capibara.c-brown:not(.dark-theme){scrollbar-color:#665e5b transparent}.capibara.c-brown:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#665e5b}.capibara.c-brown:not(.dark-theme) .header-top{background:#c7c7c7}.capibara.c-brown:not(.dark-theme) .corner{background:#c7c7c7;border-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header{background:#c7c7c7;border-bottom-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#c7c7c7)!important}.capibara.c-brown:not(.dark-theme) nav.right{border-color:#af8778}.capibara.c-brown.dark-theme .header-top,.capibara.c-brown.dark-theme nav.right{border-color:#392822}.capibara.c-brown.dark-theme .container-tl header,.capibara.c-brown.dark-theme .corner{border-bottom-color:#392822}.capibara.c-brown.dark-theme ::-moz-selection,.capibara.c-brown ::-moz-selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme ::selection,.capibara.c-brown ::selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar,.capibara.c-brown .progress-bar{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar:after,.capibara.c-brown.dark-theme .progress-bar:before,.capibara.c-brown .progress-bar:after,.capibara.c-brown .progress-bar:before{background-color:#795548!important}.capibara.c-brown.dark-theme select.tabs-select,.capibara.c-brown select.tabs-select{background-color:rgba(121,85,72,.7)!important;border-color:#795548!important}.capibara.c-brown.dark-theme .time,.capibara.c-brown .time{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .time .symbol,.capibara.c-brown .time .symbol{color:#795548}.capibara.c-brown.dark-theme .time input:active,.capibara.c-brown.dark-theme .time input:focus,.capibara.c-brown .time input:active,.capibara.c-brown .time input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-box,.capibara.c-brown.dark-theme .input-section select.input-select,.capibara.c-brown .input-box,.capibara.c-brown .input-section select.input-select{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section select.input-select:active,.capibara.c-brown.dark-theme .input-section select.input-select:focus,.capibara.c-brown .input-section select.input-select:active,.capibara.c-brown .input-section select.input-select:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section .nav-input-file,.capibara.c-brown.dark-theme .input-section input.nav-input,.capibara.c-brown .input-section .nav-input-file,.capibara.c-brown .input-section input.nav-input{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section .nav-input-file:active,.capibara.c-brown.dark-theme .input-section .nav-input-file:focus,.capibara.c-brown.dark-theme .input-section input.nav-input:active,.capibara.c-brown.dark-theme .input-section input.nav-input:focus,.capibara.c-brown .input-section .nav-input-file:active,.capibara.c-brown .input-section .nav-input-file:focus,.capibara.c-brown .input-section input.nav-input:active,.capibara.c-brown .input-section input.nav-input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-brown .input-section.msj-input-container textarea.msj{border:2px solid #795548}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-brown .input-section.msj-input-container textarea.msj:active,.capibara.c-brown .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown .cap-btn-raised,.capibara.c-brown.dark-theme .cap-btn-raised{border-color:#795548;background:rgba(121,85,72,.8)}.capibara.c-brown .cap-btn-outline,.capibara.c-brown.dark-theme .cap-btn-outline{border-color:#795548;color:#795548}.capibara.c-brown .cap-btn-outline.selected,.capibara.c-brown.dark-theme .cap-btn-outline.selected{background:rgba(121,85,72,.8)}.capibara.c-brown.dark-theme .select-container .selected-day,.capibara.c-brown .select-container .selected-day{background:rgba(121,85,72,.3);box-shadow:inset 0 0 10px rgba(121,85,72,.5)}.capibara .c-brown--background{background:#795548!important}.capibara .c-brown-d--background{background:#49332b!important}.capibara .c-brown-l--background{background:#a57868!important}.capibara .c-brown--text{color:#795548!important}.capibara .c-brown-d--text{color:#49332b!important}.capibara .c-brown-l--text{color:#a57868!important}.capibara .detail-day .list-detail .item-detail.c-brown{background:rgba(121,85,72,.2);border:1px solid #795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon{background:#795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon.outlined{border:1px solid #795548;box-shadow:inset 0 0 0 1px rgba(121,85,72,.7)}.capibara .detail-day .list-detail .item-detail.c-brown .name{color:#795548}.capibara .float-box-container .float-box span.data.c-brown{--local-color:#795548;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-brown,.capibara .float-box-container .float-box .dot.c-brown,.capibara .float-box-container .float-box .rowdot--row.c-brown .rowdot--dot{--local-color:#795548}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active{background:rgba(121,85,72,.7);border-color:rgba(121,85,72,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active:hover{background:rgba(121,85,72,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown:hover{background:rgba(121,85,72,.2);border-color:rgba(121,85,72,.9)}.capibara .input-box .mini-input-section--icon.c-brown{background:#795548}.capibara.c-blue_grey:not(.dark-theme){scrollbar-color:#767676 transparent}.capibara.c-blue_grey:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#767676}.capibara.c-blue_grey:not(.dark-theme) .header-top{background:#dcdcdc}.capibara.c-blue_grey:not(.dark-theme) .corner{background:#dcdcdc;border-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header{background:#dcdcdc;border-bottom-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dcdcdc)!important}.capibara.c-blue_grey:not(.dark-theme) nav.right{border-color:#99aeb8}.capibara.c-blue_grey.dark-theme .header-top,.capibara.c-blue_grey.dark-theme nav.right{border-color:#36474f}.capibara.c-blue_grey.dark-theme .container-tl header,.capibara.c-blue_grey.dark-theme .corner{border-bottom-color:#36474f}.capibara.c-blue_grey.dark-theme ::-moz-selection,.capibara.c-blue_grey ::-moz-selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme ::selection,.capibara.c-blue_grey ::selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar,.capibara.c-blue_grey .progress-bar{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar:after,.capibara.c-blue_grey.dark-theme .progress-bar:before,.capibara.c-blue_grey .progress-bar:after,.capibara.c-blue_grey .progress-bar:before{background-color:#607d8b!important}.capibara.c-blue_grey.dark-theme select.tabs-select,.capibara.c-blue_grey select.tabs-select{background-color:rgba(96,125,139,.7)!important;border-color:#607d8b!important}.capibara.c-blue_grey.dark-theme .time,.capibara.c-blue_grey .time{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .time .symbol,.capibara.c-blue_grey .time .symbol{color:#607d8b}.capibara.c-blue_grey.dark-theme .time input:active,.capibara.c-blue_grey.dark-theme .time input:focus,.capibara.c-blue_grey .time input:active,.capibara.c-blue_grey .time input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-box,.capibara.c-blue_grey.dark-theme .input-section select.input-select,.capibara.c-blue_grey .input-box,.capibara.c-blue_grey .input-section select.input-select{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section select.input-select:active,.capibara.c-blue_grey.dark-theme .input-section select.input-select:focus,.capibara.c-blue_grey .input-section select.input-select:active,.capibara.c-blue_grey .input-section select.input-select:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file,.capibara.c-blue_grey.dark-theme .input-section input.nav-input,.capibara.c-blue_grey .input-section .nav-input-file,.capibara.c-blue_grey .input-section input.nav-input{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:active,.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:active,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:focus,.capibara.c-blue_grey .input-section .nav-input-file:active,.capibara.c-blue_grey .input-section .nav-input-file:focus,.capibara.c-blue_grey .input-section input.nav-input:active,.capibara.c-blue_grey .input-section input.nav-input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj{border:2px solid #607d8b}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey .cap-btn-raised,.capibara.c-blue_grey.dark-theme .cap-btn-raised{border-color:#607d8b;background:rgba(96,125,139,.8)}.capibara.c-blue_grey .cap-btn-outline,.capibara.c-blue_grey.dark-theme .cap-btn-outline{border-color:#607d8b;color:#607d8b}.capibara.c-blue_grey .cap-btn-outline.selected,.capibara.c-blue_grey.dark-theme .cap-btn-outline.selected{background:rgba(96,125,139,.8)}.capibara.c-blue_grey.dark-theme .select-container .selected-day,.capibara.c-blue_grey .select-container .selected-day{background:rgba(96,125,139,.3);box-shadow:inset 0 0 10px rgba(96,125,139,.5)}.capibara .c-blue_grey--background{background:#607d8b!important}.capibara .c-blue_grey-d--background{background:#41545e!important}.capibara .c-blue_grey-l--background{background:#8aa2ae!important}.capibara .c-blue_grey--text{color:#607d8b!important}.capibara .c-blue_grey-d--text{color:#41545e!important}.capibara .c-blue_grey-l--text{color:#8aa2ae!important}.capibara .detail-day .list-detail .item-detail.c-blue_grey{background:rgba(96,125,139,.2);border:1px solid #607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon{background:#607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon.outlined{border:1px solid #607d8b;box-shadow:inset 0 0 0 1px rgba(96,125,139,.7)}.capibara .detail-day .list-detail .item-detail.c-blue_grey .name{color:#607d8b}.capibara .float-box-container .float-box span.data.c-blue_grey{--local-color:#607d8b;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue_grey,.capibara .float-box-container .float-box .dot.c-blue_grey,.capibara .float-box-container .float-box .rowdot--row.c-blue_grey .rowdot--dot{--local-color:#607d8b}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active{background:rgba(96,125,139,.7);border-color:rgba(96,125,139,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active:hover{background:rgba(96,125,139,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey:hover{background:rgba(96,125,139,.2);border-color:rgba(96,125,139,.9)}.capibara .input-box .mini-input-section--icon.c-blue_grey{background:#607d8b}.capibara *,.capibara :after,.capibara :before{box-sizing:border-box}.capibara input{outline:none}.capibara input[type=number]{-moz-appearance:textfield}.capibara input[type=number]::-webkit-inner-spin-button,.capibara input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.capibara input[type=number]::-moz-placeholder{opacity:1}.capibara input[type=number]:-ms-input-placeholder{opacity:1}.capibara input[type=number]::placeholder{opacity:1}.capibara.dark-theme .hide-dark,.capibara:not(.dark-theme) .hide-light{display:none!important}.capibara .truncate{width:100%;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.capibara .hide{display:none!important}.capibara .text-title{font-size:1.25em;font-weight:700;margin:.5em .3em}.capibara .text-subtitle{font-size:.875em;font-weight:700;margin:.5em .3em;flex:0 0 auto}.capibara .text-hint{font-size:.75em;margin:.3em;text-align:left;align-self:flex-start}.capibara .text-subtitle-2{font-size:.75em;margin:.5em .3em;flex:0 0 auto}.capibara .d-inline-block{display:inline-block}.capibara .d-block{display:block}.capibara .d-flex{display:flex;flex-direction:column;align-items:center}@media screen and (min-width:960px){.capibara:not(.force-mobile) .c-d-desktop-none{display:none!important}.capibara:not(.force-mobile) .c-d-desktop-inline-block{display:inline-block!important}.capibara:not(.force-mobile) .c-d-desktop-block{display:block!important}.capibara:not(.force-mobile) .c-d-desktop-flex{display:flex!important}}@media screen and (max-width:959px){.capibara .c-d-mobile-none{display:none!important}.capibara .c-d-mobile-flex{display:flex!important}.capibara .c-d-mobile-block{display:block!important}.capibara .c-d-mobile-inline-block{display:inline-block!important}}.capibara.force-mobile .c-d-mobile-none{display:none!important}.capibara.force-mobile .c-d-mobile-flex{display:flex!important}.capibara.force-mobile .c-d-mobile-block{display:block!important}.capibara.force-mobile .c-d-mobile-inline-block{display:inline-block!important}.capibara.force-mobile .header-top .tabs-container{display:none!important}.capibara{scrollbar-width:auto}.capibara ::-webkit-scrollbar{width:12px;height:12px;opacity:.5}.capibara ::-webkit-scrollbar-corner,.capibara ::-webkit-scrollbar-track{background:transparent}.capibara ::-webkit-scrollbar-thumb{border-radius:5px;background:grey}.capibara.dark-theme ::-webkit-scrollbar-corner,.capibara.dark-theme ::-webkit-scrollbar-track{background:transparent}.capibara.dark-theme ::-webkit-scrollbar-thumb{background:#bdbdbd}.capibara{position:relative;font-family:Roboto,sans-serif;height:inherit;max-height:inherit;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;font-size:var(--font-size)}.capibara pre{font-family:Roboto,sans-serif!important}.capibara{color:#37474f;background:#f5f5f5}.capibara.dark-theme{color:#f0f0f0;background:#222837}.capibara .container-tl{width:100%;height:calc(100% - var(--header-top-height));max-height:calc(100% - var(--header-top-height));position:relative;overflow:scroll;margin:0;will-change:scroll-position}.capibara.extended-right .container-tl{width:calc(100% - var(--nav-right-width))}.capibara .container-tl{background:#f5f5f5}.capibara.dark-theme .container-tl{background:#222837}.capibara .container-tl .today-line{width:0;position:absolute}.capibara .container-tl .today-line.disable-line,.capibara .container-tl .today-line.disable-line:after{display:none!important}.capibara .container-tl .today-line:after{margin-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width) + 1px);position:absolute;display:block;left:0;top:0;content:\\\"\\\";width:2px;height:100%;background:rgba(183,28,28,.4)}.capibara .container-tl.header-extended .container-tl .today-line:after{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .corner{position:absolute;top:var(--header-top-height);z-index:4;height:var(--header-height);border:solid rgba(0,0,0,.4);border-width:0 0 2px;padding-left:8px}.capibara .corner:not(.right){left:0;border-right-width:1px;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .corner.right{right:0;width:var(--nav-right-width);display:none}.capibara .corner>div:not([class]){width:inherit;height:inherit}.capibara .corner .btn-container{padding-top:.5em}.capibara .corner .btn-container .corner-btn{font-size:.825em;margin:0 4px;padding:4px 8px}.capibara .corner .corner-title{height:inherit;display:block;text-align:left;position:relative}.capibara .corner .corner-title span.bottom-text{position:absolute;left:0;bottom:8px}@media screen and (max-width:959px){.capibara .corner .corner-title{font-size:.75em}}.capibara .corner .initial-corner{position:absolute;left:var(--nav-width);top:0;width:var(--initial-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .initial-corner .initial-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .initial-corner .initial-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .initial-corner .initial-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .extend-corner{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;width:var(--ex-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .extend-corner .ex-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .extend-corner .ex-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .extend-corner .ex-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .cap-btn-nav-corner{position:absolute;right:0;top:0;width:var(--btn-nav-width);height:var(--header-height);min-width:100px;padding-top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles{text-align:right;display:flex;flex-direction:column;position:absolute;right:0;top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container{position:relative;border-radius:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:none}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container.input-title--accent .input-title{color:#fff;background:grey}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container span.average{font-weight:700;margin-right:4px;padding:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container .input-title{height:calc(var(--header-input-height) + 3px);line-height:calc(var(--header-input-height) + 2px);padding-right:8px;display:inline-block;font-size:.75em}.capibara.extended-right .corner.right{display:block}.capibara.header-extended .corner,.capibara.header-extended .corner .cap-btn-nav-corner,.capibara.header-extended .corner .extend-corner,.capibara.header-extended .corner .initial-corner{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:unset}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .average-box{visibility:visible}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .input-title{visibility:visible;height:auto}.capibara .corner{background:#f1fffe}.capibara.dark-theme .corner{background:#313b50;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .corner .input-titles .input-title-container .input-title{color:hsla(0,0%,100%,.8)!important}.capibara .header-top{position:relative;width:100%;height:var(--header-top-height);padding:0 .5em;display:flex;flex-flow:row wrap;z-index:5}.capibara .header-top .spacer{flex:1 0 auto}.capibara .header-top .tabs-container{display:flex;border-right:1px solid hsla(0,0%,43.5%,.3);margin-right:.5em}.capibara .header-top .tabs-container:not(:empty){padding:0}.capibara .header-top .tabs-container button.tab{cursor:pointer;padding:.25em 1em;font-weight:700;border:1px solid transparent;margin:.5em .5em 0 0;border-radius:30px;transition:background .2s ease;background:transparent}.capibara .header-top .tabs-container button.tab:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .header-top .tabs-container button.tab.disabled{color:grey}.capibara .header-top .tabs-container button.tab:hover{border-color:grey}.capibara .header-top .legends-container{display:flex}.capibara .header-top .legends-container .legend{display:flex;flex-direction:row;margin-right:1em;cursor:pointer;padding:.8em .5em .5em 0}.capibara .header-top .legends-container .legend:not(.active){opacity:.5}.capibara .header-top .legends-container .legend:not(.active) .icon-legend{background:grey!important}.capibara .header-top .legends-container .legend .icon-legend{width:.825em;height:.825em;margin:2px .5em 2px 0;background:grey;box-shadow:0 1px 2px rgba(0,0,0,.4);display:inline-block;border-radius:1px;border:1px solid rgba(0,0,0,.4)}.capibara .header-top .legends-container .legend .icon-legend.circle{border-radius:50%}.capibara .header-top .legends-container .legend:hover span{text-decoration:underline}.capibara .header-top .legends-container.force-mobile-style{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container.force-mobile-style .legend{font-size:16px;padding:.5em}@media screen and (max-width:959px){.capibara .header-top .legends-container{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container .legend{font-size:16px;padding:.5em}}.capibara .header-top{background:#f1fffe}.capibara .header-top .tabs-container .tab{color:#313b50}.capibara .header-top .tabs-container .tab.disabled{color:rgba(49,59,80,.5)}.capibara.dark-theme .header-top{background:#313b50}.capibara.dark-theme .header-top .tabs-container .tab{color:hsla(0,0%,100%,.8)}.capibara.dark-theme .header-top .tabs-container .tab.disabled{color:hsla(0,0%,100%,.4)}.capibara .corner-footer{position:-webkit-sticky;position:sticky;left:0;bottom:0;z-index:3;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:var(--item-height);margin-bottom:calc(var(--item-height)*-1);box-sizing:border-box}.capibara .corner-footer .corner-title{line-height:30px;height:inherit;display:block;text-align:left;box-sizing:border-box;position:relative;font-weight:700;padding:4px 8px}.capibara .corner-footer{background:#fff;color:#fff;border-color:rgba(0,0,0,.12)}.capibara.dark-theme .corner-footer{background:#313b50;color:#f0f0f0;border-color:rgba(64,78,105,.6)}.capibara nav.right{position:absolute;right:0;top:calc(var(--header-height) + var(--header-top-height));height:calc(100% - var(--header-height) - var(--header-top-height));overflow-y:scroll;overflow-x:hidden;z-index:5;display:none;border-left:1px solid red}.capibara nav.right,.capibara nav.right .child-nav-item,.capibara nav.right .nav-item{width:var(--nav-right-width)}.capibara nav.right .nav-input-container{text-align:center}.capibara nav.right .nav-input-container .button-section{padding-bottom:.75em;padding-top:.75em;position:-webkit-sticky;position:sticky;bottom:0}.capibara nav.left{min-height:calc(100% - var(--header-height));position:-webkit-sticky;position:sticky;left:0;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:auto;z-index:2;border-right:1px solid #b0bec5;overflow:visible;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara nav.left .child-nav-item,.capibara nav.left .nav-item{width:var(--nav-width)}.capibara nav.left .detail-nav-item{min-width:250px;max-width:500px;width:-webkit-max-content;width:-moz-max-content;width:max-content;min-height:70px;position:absolute;left:3rem;top:0;border:1px solid grey;z-index:4;border-radius:5px;padding:16px;transition:all .3s ease;flex-flow:column nowrap;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);transform:translateY(calc(.5rem + var(--item-height)))}.capibara nav.left .detail-nav-item.to-bottom{transform:translateY(calc(-100% - .5rem))}.capibara nav.left .detail-nav-item .header-detail .detail-title{font-size:1.125em;font-weight:700;margin-bottom:8px;max-width:100%;width:100%;padding-right:80px}.capibara nav.left .detail-nav-item .header-detail .detail-subtitle{font-size:.875;margin-bottom:8px}.capibara nav.left .detail-nav-item .header-detail .header-chip{position:absolute;right:16px;top:16px;padding:2px 8px;border:3px solid grey;border-radius:5px}.capibara nav.left .detail-nav-item .detail-container>div{margin:6px 0}.capibara nav.left .initial-nav-list{width:var(--initial-nav-width);position:absolute;left:var(--nav-width);top:0;overflow:hidden;display:block}.capibara nav.left .initial-nav-list .child-initial-nav-item,.capibara nav.left .initial-nav-list .initial-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:34px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-title,.capibara nav.left .initial-nav-list .initial-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col,.capibara nav.left .initial-nav-list .initial-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input{padding:0}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>.hour-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>.hour-input{font-size:.875em;width:calc(100% - 8px);border:1px solid grey;border-radius:3px;height:24px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:focus,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .extend-nav-list{width:var(--ex-nav-width);position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;overflow:hidden;display:block}.capibara nav.left .extend-nav-list .child-ex-nav-item,.capibara nav.left .extend-nav-list .ex-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:1.75rem}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-title,.capibara nav.left .extend-nav-list .ex-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col,.capibara nav.left .extend-nav-list .ex-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input{padding:0}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:focus,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .cap-btn-nav-list{left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width));width:var(--btn-nav-width);position:absolute;top:0;overflow:hidden}.capibara nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content{height:var(--item-height);width:inherit;padding:4px 6px;border-bottom:1px solid #b0bec5;text-align:right}.capibara nav.left .nav-item-total-footer{padding-top:3px}.capibara nav .cap-btn-nav-item.parent,.capibara nav .ex-nav-item.parent,.capibara nav .initial-nav-item.parent,.capibara nav .nav-item-container.parent{background:rgba(25,118,210,.1)}.capibara nav .cap-btn-nav-item.parent>.item-title,.capibara nav .ex-nav-item.parent>.item-title,.capibara nav .initial-nav-item.parent>.item-title,.capibara nav .nav-item-container.parent>.item-title{max-width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 60px);width:auto}.capibara nav .nav-item-list .child-nav-item,.capibara nav .nav-item-list .nav-item{min-height:var(--item-height);box-sizing:border-box;position:relative}.capibara nav .nav-item-list .child-nav-item .nav-item-container,.capibara nav .nav-item-list .nav-item .nav-item-container{display:flex;border-bottom:1px solid #b0bec5;height:var(--item-height)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{transition:all .5s ease;background:transparent;border:none;width:34px;flex:0 0 34px;font-size:1.5em;text-align:center;cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon:focus,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{flex:0 0 34px;font-size:1.125em;vertical-align:middle;text-align:center;line-height:40px;margin-top:12px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon path,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon path{width:20px;height:20px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title{flex:1 1 auto;display:grid;font-size:1em;line-height:34px;padding:4px 8px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.full-width,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.full-width{flex:1 0 auto;display:flex;z-index:2;min-width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 40px);width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 40px)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable{cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable:hover{background:hsla(0,0%,39.2%,.2)!important;text-decoration:underline}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.hoverable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.hoverable:hover{background:hsla(0,0%,39.2%,.2)!important}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .item-title-content,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .item-title-content{flex:1 1 auto}@media screen and (max-width:959px){.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.click-label-to-detail .item-title-content,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.click-label-to-detail .item-title-content{text-decoration:underline!important}}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn-container,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn-container{flex:0 0 auto;width:auto;text-align:right}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn{margin-left:2rem;height:24px;line-height:1rem;background:transparent;border:1px solid;color:currentColor;font-size:.875em;padding:4px 8px;border-radius:3px;cursor:pointer;z-index:10}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn:hover{background:hsla(0,0%,39.2%,.2)!important}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon{margin-left:.5rem;padding:2px 6px;display:inline-flex;align-items:center;justify-content:center}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon,.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon{display:inline-flex}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon svg,.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon svg,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon svg,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon svg{width:18px;height:18px}.capibara.force-mobile nav .nav-item-list .nav-item .nav-item-container .item-title.click-label-to-detail .item-title-content{text-decoration:underline}.capibara nav .multibuttons-btn{background:transparent;border:none;color:#999;font-size:1.5em;cursor:pointer;min-width:38px;max-height:38px;display:flex;flex-direction:row;align-items:center;justify-content:center}.capibara nav .multibuttons-btn:hover{background:hsla(0,0%,39.2%,.2)}.capibara.extended-right nav.right{display:block}.capibara.header-extended nav.left{min-height:calc(100% - var(--header-height) + var(--ex-header-height))}.capibara.header-extended nav.right{top:calc(var(--header-height) + var(--header-top-height) + var(--ex-header-height));height:calc(100% - var(--header-height) - var(--header-top-height) - var(--ex-header-height))}.capibara nav.left,.capibara nav.right,.capibara nav.right .button-section{background:#fafafa}.capibara nav.left .detail-nav-item{border-color:rgba(0,0,0,.2);background:#fff}.capibara nav.left .detail-nav-item .header-chip.red-light{border-color:#f84747}.capibara nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fdd835}.capibara nav.left .detail-nav-item .header-chip.green-light{border-color:#38993d}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#37474f}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:rgba(55,71,79,.2)}.capibara.dark-theme nav.right,.capibara.dark-theme nav.right .button-section{background:#222837}.capibara.dark-theme nav.left{background:#222837;border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .detail-nav-item{border-color:#404e69;background:#222837}.capibara.dark-theme nav.left .detail-nav-item .header-chip{color:#f0f0f0}.capibara.dark-theme nav.left .detail-nav-item .header-chip.red-light{border-color:#aa1a1a}.capibara.dark-theme nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fbcd00}.capibara.dark-theme nav.left .detail-nav-item .header-chip.green-light{border-color:#388e3c}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input{background:#404e69;color:#f0f0f0}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:focus{background:hsla(0,0%,100%,.2)}.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#f0f0f0}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:hsla(0,0%,94.1%,.2)}.capibara .container-tl header{height:var(--header-height);width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;top:0;min-width:100%;position:-webkit-sticky;position:sticky;z-index:3;border-bottom:2px solid grey;box-sizing:border-box;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara .container-tl header .header-container-extended{height:auto;position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;box-sizing:border-box;display:flex;flex-direction:column}.capibara .container-tl header .header-container-extended .input-list{padding:1px 0;flex:0 0 auto;display:flex;flex-direction:row}.capibara .container-tl header .header-container-extended .input-list:not(.persistent){display:none}.capibara .container-tl header .header-container-extended .input-list>div{width:var(--day-width)}.capibara .container-tl header .header-container-extended .input-list>div>span{display:block;width:inherit;line-height:var(--header-input-height);height:var(--header-input-height);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input{width:inherit;height:var(--header-input-height);border:1px solid grey;border-left-width:0;border-radius:0;background:hsla(0,0%,100%,.5);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.8)}.capibara .container-tl header .header-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;display:flex;height:var(--header-labels-height)}.capibara .container-tl header .header-container .header-item{padding:6px 8px;min-width:var(--item-min-width);height:var(--header-height);text-align:center;box-sizing:border-box;position:relative;border-left:1px solid rgba(0,0,0,.1)}.capibara .container-tl header .header-container .header-item span.bottom-text{position:absolute;left:0;bottom:8px;width:100%}.capibara .container-tl header .agno-calendario{display:inline-block;width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .agno{position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));display:inline-block;padding-left:8px;padding-right:32px;font-size:.75em;margin-top:4px}.capibara .container-tl header .agno-calendario .meses{display:block;display:flex}.capibara .container-tl header .agno-calendario .mes-calendario{display:inline-block;min-width:var(--day-width)}.capibara .container-tl header .agno-calendario .mes-calendario .mes{display:inline-block;position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--btn-nav-width));padding-left:.5em;padding-right:2em;font-size:.875em;margin-top:6px}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced{width:var(--day-width);max-width:var(--day-width);overflow:hidden}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-2{width:calc(var(--day-width)*2);max-width:calc(var(--day-width)*2)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-3{width:calc(var(--day-width)*3);max-width:calc(var(--day-width)*3)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-4{width:calc(var(--day-width)*4);max-width:calc(var(--day-width)*4)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced .mes-label{width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{content:\\\"\\\";background:linear-gradient(90deg,transparent,red);position:absolute;right:0;top:0;height:100%;width:calc(var(--day-width)/2)}.capibara .container-tl header .agno-calendario .mes-calendario .dias{display:flex;margin-top:5px}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{width:var(--day-width);height:var(--header-day-height);vertical-align:bottom;font-size:.875em;border-right:1px solid rgba(0,0,0,.1);box-sizing:border-box;padding:4px 6px;text-align:center;position:relative}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable{cursor:pointer}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.has-alert:after{content:\\\"\\\";display:block;position:absolute;width:0;height:0;right:0;top:0;border-color:red red transparent transparent;border-style:solid;border-width:6px;z-index:1}.capibara.header-extended .container-tl header{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .container-tl header .header-container-extended .input-list:not(.persistent){display:flex}.capibara .container-tl header{background:#f1fffe;color:#37474f}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f1fffe)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:rgba(0,0,0,.1);color:#263238}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(229,57,53,.9);color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:green;color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara .container-tl header .header-container-extended .input-list .dia-input input,.capibara .container-tl header .header-container-extended .input-list div>span{color:#313b50}.capibara.dark-theme .container-tl header{background:#313b50;color:#f0f0f0;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#313b50)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:#222837;color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(183,28,28,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:rgba(56,142,60,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara.dark-theme .container-tl header .header-container-extended .input-list div>span{color:hsla(0,0%,100%,.8)!important}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input{background:rgba(64,78,105,.6);color:hsla(0,0%,100%,.8)!important;border-color:#313b50}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.2)}.capibara .container-tl .plot-vertical-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-vertical-container .plot-vertical{background:rgba(0,0,0,.3);width:var(--day-width);height:calc(100vh - var(--header-height) - var(--header-top-height));position:absolute;top:0;left:0}.capibara .container-tl .plot-vertical-container .plot-vertical.rain{background:repeating-linear-gradient(53deg,rgba(3,155,229,.2),rgba(3,155,229,.2) 5px,transparent 0,transparent 12px)}.capibara .container-tl .plot-horizontal-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-horizontal-container .plot-horizontal{background:rgba(0,0,0,.3);width:100vw;height:var(--item-height);position:absolute;top:0;left:0}.capibara .container-tl .plot-horizontal-container .plot-horizontal.plot-parent{background:rgba(25,118,210,.1)}.capibara .container-tl.extended-right .container-tl .plot-container .plot-vertical{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .container-tl footer{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;bottom:0;min-width:100%;height:var(--item-height);position:-webkit-sticky;position:sticky;z-index:2;box-sizing:border-box}.capibara .container-tl footer .footer-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));box-sizing:border-box;min-width:100%;display:flex}.capibara .container-tl footer .footer-container .footer-item{padding:10px 2px;width:var(--day-width);cursor:default;border-left:1px solid rgba(0,0,0,.1);box-sizing:border-box;height:var(--item-height);text-align:center}.capibara .container-tl footer{background:#fff;color:#fff}.capibara .container-tl.dark-theme footer{background:#313b50;color:#f0f0f0}.capibara.has-mobile-footer{display:flex;flex-direction:column}.capibara.has-mobile-footer .container-tl{flex:1;min-height:0;margin-bottom:var(--mobile-footer-height)}.capibara .mobile-footer{position:fixed;bottom:0;z-index:2;width:100%;flex-shrink:0;height:var(--mobile-footer-height);min-height:var(--mobile-footer-height);padding:.5em 1em;display:flex;align-items:center;justify-content:space-between;gap:.5em;box-sizing:border-box}.capibara .mobile-footer .mobile-footer-content{display:flex;align-items:center;gap:.5em;flex:1}.capibara .mobile-footer .mobile-footer-buttons{display:flex;gap:.5em;align-items:center;margin-left:auto}.capibara .mobile-footer .mobile-footer-select-toggle{display:inline-flex;align-items:center;gap:.5em;width:auto;min-width:auto;padding:4px 8px;border-radius:4px;margin-right:0;background:hsla(0,0%,100%,.35);border:none}.capibara .mobile-footer .mobile-footer-select-toggle .mobile-footer-select-count,.capibara .mobile-footer .mobile-footer-select-toggle .mobile-footer-select-label{font-size:.875em;white-space:nowrap}.capibara .mobile-footer .mobile-footer-btn,.capibara .mobile-footer .mobile-footer-cancel{flex-shrink:0;border:none}.capibara .mobile-footer .mobile-footer-btn-hidden{display:none!important}.capibara .mobile-footer{background:#fff;color:#fff;border-top:1px solid rgba(0,0,0,.12)}.capibara .mobile-footer .mobile-footer-select-toggle{background:#1e79d3!important;border:none!important;color:#fff!important}.capibara .mobile-footer .mobile-footer-select-toggle svg{fill:#fff}.capibara.dark-theme .mobile-footer{background:#313b50;color:#f0f0f0;border-top:1px solid rgba(64,78,105,.6)}.capibara.dark-theme .mobile-footer .mobile-footer-select-toggle{background:#1e79d3!important;color:#fff!important}.capibara.dark-theme .mobile-footer .mobile-footer-btn,.capibara.dark-theme .mobile-footer .mobile-footer-cancel{border:none;color:#fff}.capibara.dark-theme .mobile-footer .mobile-footer-btn svg,.capibara.dark-theme .mobile-footer .mobile-footer-cancel svg{fill:#fff}.capibara.dark-theme .mobile-footer .mobile-footer-select-toggle{background:#388e3c!important;border:none!important;color:#fff}.capibara.dark-theme .mobile-footer .mobile-footer-select-toggle svg{fill:#fff}.capibara .container-tl .table{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));top:var(--header-height);width:calc(100% - var(--nav-width) - var(--initial-nav-width) - var(--ex-nav-width) - var(--btn-nav-width));max-height:calc(100% - var(--header-height));height:calc(100% - var(--header-height));margin-top:-1px}.capibara .container-tl .table .day-mouse-over{position:absolute;left:0;top:0;width:var(--day-width);height:var(--item-height);border:3px solid rgba(245,124,0,.5);box-shadow:0 0 2px #f57c00,inset 0 0 3px #f57c00;transition:transform .1s ease;overflow:visible;will-change:transform}.capibara .container-tl .table .day-mouse-over:after,.capibara .container-tl .table .day-mouse-over:before{position:absolute;background:rgba(245,124,0,.1);content:\\\"\\\";display:block}.capibara .container-tl .table .day-mouse-over:after{width:var(--day-width);height:100vh;right:-4px;bottom:calc(var(--item-height) - 2px)}.capibara .container-tl .table .day-mouse-over:before{height:var(--item-height);width:100vw;right:calc(var(--day-width) - 2px);bottom:-4px}.capibara .container-tl .table .background-grid{width:calc(var(--day-width)*20);height:calc(var(--item-height)*20);position:absolute;left:0;top:1px;background-repeat:repeat;background-size:var(--day-width) var(--item-height),calc(var(--day-width)*7) var(--item-height),calc(var(--day-width)*7) var(--item-height);background-image:linear-gradient(90deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(0deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(90deg,transparent calc(var(--day-width)*5),rgba(80,80,80,.1) 0);background-position:0 0,0 0,0 0}.capibara .container-tl .table .draw-box{position:relative}.capibara .container-tl .table .draw-box canvas{position:absolute;left:0;top:0}.capibara.header-extended .container-tl .table{top:calc(var(--header-height) + var(--ex-header-height))}.capibara .select-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .select-container .selected-day{width:var(--day-width);height:var(--item-height);position:absolute;background:hsla(0,0%,74.1%,.4);box-shadow:inset 0 0 5px hsla(0,0%,74.1%,.8)}.capibara .select-container .selected-day[cap-badge]:after{content:attr(cap-badge);display:block;position:absolute;right:-3px;top:-3px;background:#1565c0;font-size:.75em;color:#fff;width:1.5em;height:1.5em;border-radius:50%;z-index:2;text-align:center;font-weight:700;padding:2px;box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara .detail-day{min-height:50px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;border:1px solid grey;padding:.75em;display:flex;flex-flow:column nowrap;margin:0 0 0 1em;box-sizing:border-box;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);position:absolute;border-radius:5px;transition:all .3s ease;will-change:transform,left,top;transform:translateY(calc(var(--item-height)/2*-1));z-index:4;opacity:1}.capibara .detail-day:after{content:\\\"\\\";background:inherit;width:20px;height:20px;display:block;position:absolute;left:-11px;top:calc(var(--item-height)/2 + 7px);transform:rotate(45deg);border-color:grey;border-style:solid;border-width:0 0 1px 1px}.capibara .detail-day.dd-hide{display:none}.capibara .detail-day.has-right-arrow{margin:0 16px 0 0;transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(var(--item-height)/2*-1))}.capibara .detail-day.has-right-arrow:after{border-width:1px 1px 0 0;left:unset;right:-11px}.capibara .detail-day.has-ceil-arrow{transform:translateY(-7px)}.capibara .detail-day.has-ceil-arrow:after{top:6px}.capibara .detail-day.has-ceil-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(-7px)}.capibara .detail-day.has-ceil-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-middle-arrow{transform:translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow:after{top:calc(50% - 10px)}.capibara .detail-day.has-middle-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-bottom-arrow{transform:translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow:after{top:unset;bottom:4px}.capibara .detail-day.has-bottom-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day .header-detail .title{font-size:1.25em;font-weight:700;margin-bottom:.25em;min-width:10em;max-width:20em;line-height:unset}.capibara .detail-day .header-detail .subtitle{font-size:.875em;margin-bottom:8px;min-width:10em}.capibara .detail-day .list-detail{margin:0;flex:1 1 auto}.capibara .detail-day .list-detail.list .item-detail{margin:0;font-size:.875em;position:relative;padding:.5em .5em .5em 1em;border-radius:0;box-sizing:border-box;overflow:hidden;background:transparent;border:unset;border-top:1px solid rgba(0,0,0,.1);display:flex;flex-direction:row}.capibara .detail-day .list-detail.list .item-detail .left-icon{width:8px;height:8px;min-height:unset!important;left:1px;top:10px;border-radius:50%}.capibara .detail-day .list-detail.list .item-detail .left-icon.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .detail-day .list-detail.list .item-detail .left-icon.outlined{background:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.triangle{border-radius:0;transform:rotate(45deg) skew(10deg,10deg) translate(3px,3px);width:0;height:0;border-width:5px;border-style:solid;background-color:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.shield{width:10px;height:10px;border-radius:0 0 50% 50%}.capibara .detail-day .list-detail.list .item-detail .name{flex:0 1 40%;font-weight:700;margin-bottom:0;padding-right:1em}.capibara .detail-day .list-detail.list .item-detail .item-description{flex:1 1 auto;display:flex;flex-direction:column;align-items:start}.capibara .detail-day .list-detail.list .item-detail .item-description .desc{display:flex;margin-bottom:3px;align-items:baseline}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column{flex-direction:column;align-items:start;width:100%;border-bottom-width:1px;border-bottom-style:solid;margin-bottom:0;padding-bottom:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column:last-child{border-color:transparent}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column .label{margin-right:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .label{display:inline-block;flex:1 1 65%;font-weight:700;margin-right:.5em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .val{display:flex;align-items:baseline;margin-left:1em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .prefix,.capibara .detail-day .list-detail.list .item-detail .item-description .desc .suffix{font-size:.85em;flex:0 0 auto}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .value:not(empty){margin-right:.2em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc sup{top:-1em!important}.capibara .detail-day .list-detail.column-flex{max-height:60vh;-moz-column-count:2;column-count:2;-moz-column-gap:20px;column-gap:20px;-moz-column-fill:balance;column-fill:balance}.capibara .detail-day .list-detail.column-flex.single-item{-moz-column-count:1;column-count:1}.capibara .detail-day .list-detail.flex{display:inline-flex;flex-flow:wrap;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;max-height:25%}.capibara .detail-day .list-detail.flex .item-detail{flex:0 0 auto;min-width:8em;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.capibara .detail-day .list-detail.column{-moz-columns:7em 3;columns:7em 3;min-width:30em}.capibara .detail-day .list-detail.column .item-detail{display:inline-block;width:100%}.capibara .detail-day .list-detail .item-detail{margin:4px;position:relative;padding:.5em 1em;border-radius:6px;box-sizing:border-box;overflow:hidden}.capibara .detail-day .list-detail .item-detail .name{font-weight:700;margin-bottom:.5em;color:var(--local-color-font,inherit)}.capibara .detail-day .list-detail .item-detail .item-description .desc .label{display:inline-block;font-weight:700}.capibara .detail-day .list-detail .item-detail .left-icon{min-height:10px;height:100%;position:absolute;left:0;top:0;background:var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.outlined{border:1px solid var(--local-color,inherit);box-shadow:inset 0 0 0 1px var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.triangle{background:transparent;border-color:var(--local-color,inherit) transparent transparent var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.shield{background:var(--local-color,grey)}.capibara .detail-day .elements-detail{padding:.5em 0 .25em;display:flex;flex-wrap:wrap}.capibara .detail-day .elements-detail .name{flex:1 0 100%;font-weight:700}.capibara .detail-day .elements-detail .elements-list{margin:4px -4px}.capibara .detail-day .elements-detail .elements-list .element-detail{display:inline-block;padding:.25em .875em;border-radius:3px;color:#fff;margin:.25em}.capibara .detail-day .alert{padding:.5em 0 .25em 2em;position:relative;min-width:15em;min-width:10em;max-width:30em}.capibara .detail-day .alert .alert-icon{max-width:2em;font-size:1.75em;position:absolute;left:0;top:.5em;color:grey}.capibara .detail-day .alert .red{color:#f44336}.capibara .detail-day .msj-container{margin:0 -.78em -.75em;border:1px solid grey;z-index:2}.capibara .detail-day .msj-container pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.capibara .detail-day .msj-container .msj{min-width:10em;max-width:30em;margin:0 0 .5em;padding:.75em;font-size:.875em}.capibara .detail-day .msj-container .msj-detail{display:flex;flex-direction:column;padding:.25em .5em}.capibara .detail-day .msj-container .msj-detail .email{font-size:.875em;font-style:italic;opacity:.5}.capibara .detail-day .msj-container .msj-detail .date{font-size:.725em}.capibara .detail-day{color:#37474f;background:#fff}.capibara .detail-day,.capibara .detail-day .list-detail.list .item-detail,.capibara .detail-day .list-detail.list .item-detail .desc-column,.capibara .detail-day:after{border-color:rgba(0,0,0,.2)}.capibara .detail-day .elements-detail .elements-list .element-detail{background:rgba(55,71,79,.8)}.capibara .detail-day .msj-container{background:#ffecb3;border-color:#ffca28}.capibara .detail-day .msj-container .msj-detail{background:#ffe082;border-color:#ffca28}.capibara.dark-theme .detail-day{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .detail-day:after{border-color:#404e69}.capibara.dark-theme .detail-day .list-detail .item-detail{background:transparent!important}.capibara.dark-theme .detail-day .list-detail.list .item-detail,.capibara.dark-theme .detail-day .list-detail.list .item-detail .desc-column{border-color:#404e69}.capibara.dark-theme .detail-day .elements-detail .elements-list .element-detail{background:#293243}.capibara.dark-theme .detail-day .msj-container{background:#293243;border-color:rgba(251,192,45,.4)}.capibara.dark-theme .detail-day .msj-container .msj-detail{background:rgba(251,192,45,.1)}.capibara .cap-context-menu-container{position:absolute;left:0;top:0;z-index:10;will-change:transform,left,top}.capibara .cap-context-menu-container.cm-hide .cap-context-menu{visibility:hidden;opacity:0}.capibara .cap-context-menu-container .cap-context-menu{position:absolute;min-width:250px;z-index:2;border-radius:5px;border:1px solid grey;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);font-size:.75em;transition:all .1s linear;visibility:visible;opacity:1;padding:.4em 0;vertical-align:middle}.capibara .cap-context-menu-container .cap-context-menu_item{padding:.5em 1em;flex:0 0 auto;display:flex;flex-direction:row;align-items:center;cursor:pointer}.capibara .cap-context-menu-container .cap-context-menu_item:hover{background:rgba(20,20,20,.2)}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled{opacity:.5;cursor:unset}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled:hover{background:none}.capibara .cap-context-menu-container .cap-context-menu_item.is-divider{cursor:unset;height:0;border-bottom:1px solid rgba(20,20,20,.2);padding:0;margin:.3em 1em}.capibara .cap-context-menu-container .cap-context-menu_item_icon{display:inline-block;flex:0 0 auto;padding-right:.5em}.capibara .cap-context-menu-container .cap-context-menu_item_icon svg{width:16px;height:16px}.capibara .cap-context-menu-container .cap-context-menu{color:#37474f;border-color:rgba(0,0,0,.2);background:#fff}.capibara .cap-context-menu-container .cap-context-menu svg path{fill:#37474f}.capibara.dark-theme .cap-context-menu-container .cap-context-menu{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .cap-context-menu-container .cap-context-menu svg path{fill:#f0f0f0}.capibara .hour-input{border:1px solid grey;border-radius:3px;display:flex;justify-content:center;align-items:center;height:24px;margin:8px 4px;overflow:hidden}.capibara .hour-input input{width:50%;height:inherit;border:1px solid transparent;background:transparent;font-size:.875em}.capibara .hour-input input:active,.capibara .hour-input input:focus{border:1px solid rgba(0,0,0,.1)}.capibara .hour-input span{width:8px;text-align:center}.capibara .hour-input .hh{text-align:right}.capibara .time{border-radius:6px;display:inline-block;font-size:0}.capibara .time .symbol{display:inline-block;height:auto;width:20px;font-size:2rem;text-align:center;vertical-align:center}.capibara .time input{border-radius:6px;border:2px solid transparent;width:62px;text-align:center;font-size:2rem;position:relative;transition:all .1s ease;outline:none;background:transparent;padding:6px}.capibara .time input:active,.capibara .time input:focus{transform:scale(1.06)}.capibara .time input:invalid{border:2px solid red}.capibara .buttons-group{display:flex;flex-direction:row}.capibara .buttons-group button.cap-btn-outline{border-radius:0;margin:0 -2px 0 0}.capibara .buttons-group button.cap-btn-outline:first-of-type{border-radius:6px 0 0 6px;margin-left:4px}.capibara .buttons-group button.cap-btn-outline:last-of-type{border-radius:0 6px 6px 0;margin-right:4px}.capibara .input-box-tab-container{display:flex;width:100%;flex-wrap:nowrap;border-radius:6px 6px 0 0;border:solid grey;border-width:2px 2px 0}.capibara .input-box-tab-container .input-box-tab{flex:1 1 auto;padding:.3em 1em;font-size:.9em;border-right:1px solid grey;cursor:pointer}.capibara .input-box-tab-container .input-box-tab.active{background:hsla(0,0%,58.8%,.3)}.capibara .input-box-tab-container .input-box-tab:last-child{border-right:none}.capibara .input-box-tab-container+.input-box{border-radius:0 0 6px 6px}.capibara .input-box{margin:0 16px;min-height:180px;border:2px solid grey;border-radius:6px;overflow-y:scroll;padding-bottom:60px;width:100%;max-height:300px}.capibara .input-box .search-input-container{padding:.3em;max-width:100%;text-align:center;border-bottom:1px solid hsla(0,0%,39.2%,.3);position:relative}.capibara .input-box .search-input-container .search-input{border:1px solid #646464;border-radius:13px;height:26px;padding:.5em 1em;max-width:100%;width:100%;font-size:.8em;color:inherit}.capibara .input-box .search-input-container .search-input:-moz-placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:-ms-input-placeholder+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input-clear{position:absolute;right:1em;top:.4em;color:hsla(0,0%,39.2%,.6);background-color:transparent;border-style:none}.capibara .input-box .mini-input-section{padding:.5em 2em .5em .5em;text-align:left;width:100%;position:relative;border-bottom:1px solid hsla(0,0%,39.2%,.3)}.capibara .input-box .mini-input-section.has-icon{padding:.5em 2em .5em 1.5em}.capibara .input-box .mini-input-section.clickeable{cursor:pointer}.capibara .input-box .mini-input-section.clickeable:hover label{cursor:pointer;text-decoration:underline}.capibara .input-box .mini-input-section.is-title{background:hsla(0,0%,39.2%,.1)}.capibara .input-box .mini-input-section.is-title .mini-input-section--title{opacity:.6}.capibara .input-box .mini-input-section--tooltip{position:absolute;right:0;top:1.5em;display:none;padding:.5em;margin:1em;color:#000;border-radius:3px;z-index:2;box-shadow:0 2px 5px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section label{display:flex;flex-direction:row;flex-wrap:nowrap;font-size:.875em;align-items:baseline}.capibara .input-box .mini-input-section--titles{display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:start;max-width:100%;flex:0 1 auto}.capibara .input-box .mini-input-section--content{display:flex;flex-direction:row;justify-content:end;flex:1 0 auto;font-size:1em;padding:0 .5em}.capibara .input-box .mini-input-section--subtitle,.capibara .input-box .mini-input-section--title{position:relative;width:unset;max-width:100%;flex-grow:1}.capibara .input-box .mini-input-section--subtitle{font-size:.875em}.capibara .input-box .mini-input-section--suffix{flex:0 0 auto;font-size:.875em;display:flex;flex-direction:column}.capibara .input-box .mini-input-section--icon{display:inline-block;position:absolute;left:.5em;top:.75em;width:.75em;height:.75em;border-radius:50%;background:var(--local-color,grey);box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section--link{opacity:.6;color:#2196f3;display:inline-block;position:absolute;right:.5em;top:.75em}.capibara .input-box .mini-input-section--link svg{width:18px!important;height:18px!important}.capibara .input-box .mini-input-section:hover .mini-input-section--tooltip{display:block}.capibara .input-box .mini-input-section input{text-align:center;width:4em;margin-right:.5em;border:1px solid grey;border-radius:3px;background:hsla(0,0%,100%,.2);font-size:1em;flex:0 0 4em}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:hsla(0,0%,100%,.8)}.capibara .input-box .mini-input-section--footer{margin-top:.25em;display:flex;justify-content:space-between}.capibara select.input-select{padding:.3em 1em;width:100%;flex:1 0 100%;border:1px solid grey;border-radius:6px;background:inherit;cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.capibara select.input-select option{padding:.3em;color:inherit;background:inherit}.capibara .input-section-list{margin:16px 0}.capibara .input-section-list .input-section-title{margin-bottom:8px}.capibara .input-section-list .input-section{margin:0 16px 8px}.capibara .input-section{margin:16px;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:center;position:relative}.capibara .input-section.to-right{align-items:end}.capibara .input-section.to-left{align-items:start}.capibara .input-section .small-close{position:absolute;right:-10px;top:-10px;width:1.2em;height:1.2em;font-size:.9em;border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);text-align:center;color:#fff;background:red;border-radius:50%;vertical-align:middle}.capibara .input-section .input-section-title{flex:1 1 100%;width:100%;margin:0 auto;display:flex;flex-direction:row;justify-content:center;align-items:center}.capibara .input-section .input-section-title button{margin-left:auto;flex:0 0 auto;display:flex;flex-wrap:nowrap}.capibara .input-section .input-section-link{flex:1 1 100%;display:flex;flex-direction:row;justify-content:center;align-items:baseline;padding-top:.25em}.capibara .input-section .input-section-link a{color:#2196f3;margin-top:.75rem}.capibara .input-section.is-invalid .input-box,.capibara .input-section.is-invalid input.nav-input{border:2px solid red!important;box-shadow:0 0 3px red!important}.capibara .input-section.dense input.nav-input{width:50%;font-size:1em;padding:3px 6px}.capibara .input-section input.nav-input{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:100%;min-width:130px;max-width:170px;font-size:2em;text-align:center;padding:3px 6px;background:transparent;outline:none;transition:all .1s ease;margin-bottom:8px}.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section input.nav-input.small{font-size:1.3em}.capibara .input-section .nav-input-file{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:70%;min-width:130px;padding:3px 6px;text-align:center;background:transparent;outline:none;transition:all .1s ease;position:relative}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section .nav-input-file label{flex:1 1 auto}.capibara .input-section .nav-input-file input[type=file]{display:none}.capibara .input-section .input-section-col{width:auto;position:relative;flex:1 1 10%}.capibara .input-section .input-section-col input.nav-input{min-width:unset;width:calc(100% - 1rem);max-width:7rem}.capibara .input-section.msj-input-container textarea.msj{outline:none;border-radius:6px;border:2px solid grey;width:100%;min-width:100%;max-width:100%;min-height:100px;transition:all .1s ease;padding:8px;box-sizing:border-box}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,160,0,.2)}.capibara .input-section input[type=checkbox]{width:18px;height:18px;vertical-align:middle}.capibara .time{border:2px solid rgba(0,128,0,.7);color:green}.capibara .time .symbol,.capibara .time input{color:#37474f}.capibara .time input:active,.capibara .time input:focus{border-color:green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-box-tab-container,.capibara .input-box-tab-container .input-box-tab{border-color:green}.capibara .input-box{color:#37474f;border:2px solid green}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:#fafafa}.capibara .input-box .mini-input-section--tooltip{background:#fafafa;color:#37474f;border:1px solid #37474f}.capibara .input-section select.input-select{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section select.input-select:active,.capibara .input-section select.input-select:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section select.input-select option{background:#fafafa;color:#37474f}.capibara .input-section .nav-input-file,.capibara .input-section input.nav-input{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus,.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section.msj-input-container textarea.msj{background:rgba(255,249,196,.6);border:2px solid rgba(0,0,0,.4)}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{background:rgba(255,249,196,.8);box-shadow:0 4px 6px transparent}.capibara.dark-theme .time{border:2px solid rgba(64,78,105,.7);color:#404e69}.capibara.dark-theme .time .symbol,.capibara.dark-theme .time input{color:#f0f0f0}.capibara.dark-theme .time input:active,.capibara.dark-theme .time input:focus{border-color:#404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-box-tab-container,.capibara.dark-theme .input-box-tab-container .input-box-tab{border-color:#404e69}.capibara.dark-theme .input-box{color:#f0f0f0;border:2px solid #404e69}.capibara.dark-theme .input-box .mini-input-section input{background:#404e69;color:#f0f0f0}.capibara.dark-theme .input-box .mini-input-section input:active,.capibara.dark-theme .input-box .mini-input-section input:focus{background:#222837}.capibara.dark-theme .input-box .mini-input-section--tooltip{background:#222837;color:#f0f0f0;border:1px solid #f0f0f0}.capibara.dark-theme .input-section select.input-select{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section select.input-select:active,.capibara.dark-theme .input-section select.input-select:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section select.input-select option{background:#222837;color:#f0f0f0}.capibara.dark-theme .input-section .nav-input-file,.capibara.dark-theme .input-section input.nav-input{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section .nav-input-file:active,.capibara.dark-theme .input-section .nav-input-file:focus,.capibara.dark-theme .input-section input.nav-input:active,.capibara.dark-theme .input-section input.nav-input:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section.msj-input-container textarea.msj{background:rgba(251,192,45,.1);border:2px solid #9e9e9e;color:#f0f0f0}.capibara.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.dark-theme .input-section.msj-input-container textarea.msj:focus{background:rgba(251,192,45,.3);box-shadow:0 4px 6px hsla(0,0%,62%,.2)}.capibara button{outline:none;cursor:pointer}.capibara button.cap-rotate .mdi:before,.capibara button.cap-rotate svg{transform:rotate(180deg)}.capibara .cap-btn-icon:focus,.capibara .cap-btn-outline:focus,.capibara .cap-btn-raised:focus,.capibara .cap-btn-shape:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .cap-btn-icon:disabled,.capibara .cap-btn-outline:disabled,.capibara .cap-btn-raised:disabled,.capibara .cap-btn-shape:disabled{opacity:.6}.capibara button.cap-btn-sm{font-size:.75em;margin:4px;padding:4px 8px}.capibara .cap-btn-outline{cursor:pointer;color:grey;border:2px solid grey;padding:8px 16px;margin:0 8px;border-radius:6px;font-weight:700}.capibara .cap-btn-outline.selected{background:grey}.capibara .cap-btn-raised{cursor:pointer;padding:8px 16px;margin:0 8px;border-radius:6px;background:grey;border:2px solid grey;font-weight:700}.capibara .cap-btn-icon{display:inline-block;height:32px;width:32px;outline:none;cursor:pointer;vertical-align:middle;margin-right:16px;margin-top:4px;background:transparent;border:none;padding:4px;font-size:18px;color:grey;border-radius:50%;position:relative}.capibara .cap-btn-icon svg{fill:grey}.capibara .cap-btn-icon.cap-btn-has-badge:after{content:\\\"\\\";display:block;position:absolute;right:-.2em;top:-.2em;width:.8em;height:.8em;background:grey;border-radius:50%}.capibara .cap-btn-icon.cap-btn-icon-raised{background:#fff;border:none}.capibara .cap-btn-icon.cap-btn-icon-outline{border:1px solid grey}.capibara .cap-btn-icon.cap-btn-toggle-sidebar{position:absolute;right:10px;top:10px;z-index:2;margin:0}.capibara .cap-btn-icon .mdi{font-size:24px}.capibara .cap-btn-icon .loading-icon{display:none;position:absolute;left:0;top:0}.capibara .cap-btn-icon.loading>:not(.loading-icon){display:none}.capibara .cap-btn-icon.loading .loading-icon{display:unset}.capibara .cap-btn-shape{display:inline-block;width:24px;height:24px;outline:none;cursor:pointer;vertical-align:middle;margin:4px;background:transparent;border:none;padding:0;font-size:14px}.capibara .cap-btn-shape .mdi{font-size:24px}.capibara .cap-btn-shape.cap-btn-circle{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:2px;border-radius:50%;background:grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara .cap-btn-shape.cap-btn-circle-outline{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle-outline:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:3px;border-radius:50%;border:2px solid grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle-outline span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:grey;text-align:center}.capibara .cap-btn-shape.cap-btn-drop{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-drop:before{content:\\\"\\\";display:block;position:absolute;left:4px;top:0;border-radius:0 50% 50% 50%;background:grey;width:20px;height:20px;transform:translate(-2px,4px) rotate(45deg)}.capibara .cap-btn-shape.cap-btn-drop span{position:absolute;left:0;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara.extended-right [toggle-sidebar-right] svg,.capibara.header-extended [toggle-header] svg{transform:rotate(180deg)}.capibara .cap-btn-raised{background:#00f;border:2px solid #00f;color:#fff}.capibara .cap-btn-outline{background:transparent;border:2px solid #00f;color:#00f}.capibara .cap-btn-outline.selected{background:#00f;color:#fff}.capibara .cap-btn-shape{color:#37474f}.capibara .cap-btn-shape.cap-btn-circle,.capibara .cap-btn-shape.cap-btn-drop{color:#fff}.capibara .cap-btn-shape.cap-btn-circle:before,.capibara .cap-btn-shape.cap-btn-drop:before{background:#388e3c}.capibara .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara .cap-btn-shape.cap-btn-circle-outline:before{border-color:#388e3c}.capibara .cap-btn-icon,.capibara .cap-btn-shape.cap-btn-circle-outline span{color:#37474f}.capibara .cap-btn-icon.cap-btn-has-badge:after{background:rgba(245,124,0,.8)}.capibara .cap-btn-icon.cap-btn-icon-raised{background:rgba(84,110,122,.1);border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:active{background:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:focus,.capibara .cap-btn-icon.cap-btn-icon-raised:hover{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-outline:active{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline:focus,.capibara .cap-btn-icon.cap-btn-icon-outline:hover{background:rgba(84,110,122,.1)}.capibara.dark-theme .cap-btn-raised{background:#404e69;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline{background:transparent;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline.selected{background:#404e69;color:#f0f0f0}.capibara.dark-theme .cap-btn-shape,.capibara.dark-theme .cap-btn-shape.cap-btn-circle,.capibara.dark-theme .cap-btn-shape.cap-btn-drop{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-shape.cap-btn-circle:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop:before{background:#2e7d32}.capibara.dark-theme .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline:before{border-color:#2e7d32}.capibara.dark-theme .cap-btn-icon,.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline span{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-has-badge:after{background:rgba(56,142,60,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised{background:hsla(0,0%,94.1%,.1);border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:active{background:#f0f0f0}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:hover{background:hsla(0,0%,94.1%,.3)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:active{background:hsla(0,0%,94.1%,.1)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:hover{background:hsla(0,0%,94.1%,0)}.capibara [cap-tooltip]{position:relative;display:inline-block}.capibara [cap-tooltip]:hover:before{padding:8px;opacity:1;border-width:1px;height:auto}.capibara [cap-tooltip]:before{opacity:.3;height:0;padding:0 8px;text-align:left;overflow:hidden;font-size:14px;font-weight:400;position:absolute;top:calc(100% + 18px);left:50%;transform:translatex(-50%);background-color:rgba(0,0,0,.7);border:0 solid #000;border-radius:5px;color:#fff;content:attr(cap-tooltip);text-transform:none;min-width:100px;z-index:5}.capibara .float-box-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .float-box-container:hover .float-box-ext .long-bar-container .long-bar{opacity:.3}.capibara .float-box-container .float-box{position:absolute;cursor:default;will-change:display}.capibara .float-box-container .float-box,.capibara .float-box-container .float-box .float-box-content{width:var(--day-width);max-width:var(--day-width);min-width:var(--day-width);height:var(--item-height);max-height:var(--item-height);min-height:var(--item-height);transition:box-shadow .2s ease;display:flex;flex-direction:column;z-index:1}.capibara .float-box-container .float-box .float-box-content{overflow:hidden}.capibara .float-box-container .float-box[data-is-visible=false]{display:none!important}.capibara .float-box-container .float-box:hover{z-index:2}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{z-index:2;opacity:1}.capibara .float-box-container .float-box .icon-message{position:absolute;z-index:2;top:-3px;right:-2px;width:16px;height:16px;background:#ffeb3b;color:#4e342e;fill:#4e342e;vertical-align:middle;border-radius:50%;border:1px solid #ffeb3b}.capibara .float-box-container .float-box .icon-message svg{margin:0;top:0;position:absolute}.capibara .float-box-container .float-box.has-errors:before{content:\\\"\\\";display:block;position:absolute;width:7px;height:7px;left:1px;top:1px;border-radius:50%;background:#d32f2f;z-index:2}.capibara .float-box-container .float-box.has-errors.triangle-up:before{left:2px;width:0;height:0;transform:rotate(45deg) translate(2px,2px);border-radius:0;border-color:#64dd17 transparent transparent #64dd17;border-style:solid;border-width:4px;background-color:transparent}.capibara .float-box-container .float-box.has-errors.triangle-down:before{left:2px;width:0;height:0;transform:rotate(-135deg) translate(2px,2px);border-radius:0;border-color:#d32f2f transparent transparent #d32f2f;border-style:solid;border-width:4px;background-color:transparent}.capibara .float-box-container .float-box .dot-container-bottom,.capibara .float-box-container .float-box .dot-container-middle,.capibara .float-box-container .float-box .dot-container-top{position:absolute;left:0;width:100%;overflow:visible;height:0;display:flex;justify-content:center}.capibara .float-box-container .float-box .dot-container-top{top:1px}.capibara .float-box-container .float-box .dot-container-top .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot-container-middle{top:calc(50% - 4px)}.capibara .float-box-container .float-box .dot-container-bottom{bottom:5px}.capibara .float-box-container .float-box .dot-container-bottom .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot{width:8px;min-width:8px;height:8px;border-radius:50%;margin:1px;vertical-align:middle;border:1px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.5))}.capibara .float-box-container .float-box .dot.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .float-box-container .float-box .dot.outlined{background-color:transparent}.capibara .float-box-container .float-box .dot.triangle{width:0;height:0;transform:rotate(45deg) skew(10deg,10deg) translate(1px,1px);border-left:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-bottom:5px solid transparent;border-right:5px solid transparent;border-top:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-radius:0;background-color:transparent}.capibara .float-box-container .float-box span.data{width:100%;display:block;position:relative;font-size:.875em;text-align:center;box-sizing:border-box;height:calc(var(--item-height)/2);line-height:calc(var(--item-height)/2);margin-bottom:2px;font-weight:700;box-shadow:inset 0 0 10px hsla(0,0%,100%,.2);border-radius:3px;color:var(--local-color-font,#fff);-webkit-backdrop-filter:opacity(20%);backdrop-filter:opacity(20%);background:var(--local-color,rgba(0,0,0,.4));border:2px solid var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.data.shape-outlined{background-color:transparent!important;color:var(--local-color,inherit)}.capibara .float-box-container .float-box span.data.shape-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;z-index:-1}.capibara .float-box-container .float-box span.data.shape-bar{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px}.capibara .float-box-container .float-box span.data.shape-bar:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-outlined:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block}.capibara .float-box-container .float-box span.data.shape-bar-dashed{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-dashed:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-dashed:before{content:\\\"\\\";background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;background-color:transparent;background-size:10px 10px;background-image:repeating-linear-gradient(45deg,var(--local-color,inherit),var(--local-color,inherit) 3px,transparent 0,transparent 50%)}.capibara .float-box-container .float-box span.rowdot--row{display:flex;max-height:calc(var(--item-height)/4 - 1px);height:calc(var(--item-height)/4 - 1px);width:calc(var(--day-width) - 2px);line-height:0;color:transparent;margin:1px;border-color:var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.rowdot--row:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.rowdot--row:empty{display:none!important}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot{width:calc(var(--day-width)/4 - 2px);height:calc(var(--item-height)/4 - 2px);margin-right:1px;vertical-align:middle;border:3px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.8));box-shadow:0 0 1px 1px rgba(0,0,0,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined{background-color:hsla(0,0%,39.2%,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-rounded{border-radius:50%;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined-rounded{border-radius:50%;background-color:transparent;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box .plot-floatbox-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--local-color,rgba(0,0,0,.4));transition:opacity .2s ease}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe{background:repeating-linear-gradient(53deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe-inverse{background:repeating-linear-gradient(127deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .icon-floatbox{width:calc(var(--day-width) - 16px);margin:6px;position:absolute;left:0;top:0;opacity:.8}.capibara .float-box-container .icon-floatbox svg path{fill:var(--local-color,rgba(0,0,0,.4));filter:drop-shadow(0 0 1px rgba(0,0,0,.2))}.capibara .float-box-container .icon-floatbox:hover{opacity:1}.capibara .float-box-container .float-box-ext{position:absolute;overflow:visible;cursor:default;transition:box-shadow .2s ease;will-change:display;pointer-events:none}.capibara .float-box-container .float-box-ext .long-bar-container{position:absolute;left:var(--day-width);top:0;display:flex;flex-direction:column;justify-content:start;align-items:start}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar{width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);min-width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);height:calc(var(--item-height)/4 - 3.5px);line-height:0;color:transparent;background:var(--local-color,rgba(0,0,0,.4));border-radius:0 3px 3px 0;margin-left:-3px;margin-top:1px;margin-bottom:1px;opacity:var(--local-opacity,1);border:2px solid rgba(0,0,0,.2);border-left-width:0;transition:opacity .2s ease}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar.solid{opacity:1}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar:first-of-type{margin-top:4px}.capibara .float-box-container .float-box:hover{box-shadow:0 0 2px 7px rgba(113,189,255,.4)}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px rgba(113,189,255,.4)}.capibara .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#f84747}.capibara .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fdd835}.capibara .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#38993d}.capibara .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.2)}.capibara.dark-theme .float-box-container .float-box:hover{box-shadow:0 0 2px 7px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#aa1a1a}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fbcd00}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#388e3c}.capibara.dark-theme .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.3)}.capibara.dark-theme span.data.shape-outlined{color:#fff!important}.capibara .progress-bar{width:100%;height:4px;background-color:hsla(0,0%,86.7%,.2);overflow:hidden;position:absolute;left:0;bottom:0;transition:height 1s ease}.capibara .progress-bar.hide-progress{height:0}.capibara .progress-bar:before{-webkit-animation-name:loading-fast1;animation-name:loading-fast1;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.capibara .progress-bar:after,.capibara .progress-bar:before{content:\\\"\\\";position:absolute;transform:translateX(-100%);width:62.5%;height:100%;background-color:#292929;-webkit-animation-duration:2s;animation-duration:2s}.capibara .progress-bar:after{-webkit-animation-name:loading-fast2;animation-name:loading-fast2;-webkit-animation-delay:1.3s;animation-delay:1.3s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}span.mdi{min-width:14px;min-height:14px;display:inline-block}span.mdi.mdi-subdirectory-arrow-right{color:rgba(0,0,0,.2)}.capibara .light{display:block;width:18px;height:18px;flex:0 0 18px;border-radius:50%;margin:12px 8px;border:2px solid rgba(0,0,0,.3);background:var(--light-color,unset);border-color:hsla(0,0%,100%,.8)}.capibara .light.red-light{background:#f84747}.capibara .light.yellow-light{background:#fdd835}.capibara .light.green-light{background:#38993d}.capibara .light.disabled-light{background:#737373}.capibara .light.blue-light{background:#0277bd}.capibara.dark-theme .light{border-color:#404e69}.capibara.dark-theme .light.red-light{background:#aa1a1a}.capibara.dark-theme .light.yellow-light{background:#fbcd00}.capibara.dark-theme .light.green-light{background:#388e3c}.capibara .tab-select-container{position:relative;display:inline-flex;align-items:center}.capibara .tab-select-container:after{content:\\\"\\\";position:absolute;right:20px;top:50%;transform:translateY(-50%);pointer-events:none;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #fff}.capibara select.tabs-select{background:grey;color:#fff;font-size:16px;outline:none;width:100px;padding:3px 28px 3px 18px;font-weight:700;border:1px solid transparent;margin:8px;border-radius:30px;transition:background .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none}.capibara select.tabs-select option{color:grey;background:#fff;padding:15px}.capibara select.tabs-select.disabled{color:grey}.capibara select.tabs-select:hover{border-color:grey}\", \"\"]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvc2Nzcy9zdHlsZS5zY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvc2Nzcy9zdHlsZS5zY3NzPzQxM2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVJvYm90bzppdGFsLHdnaHRAMCwzMDA7MCw0MDA7MCw1MDA7MCw3MDA7MCw5MDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw3MDA7MSw5MDAmZGlzcGxheT1zd2FwKTtcIl0pO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdHstLWhlYWRlci10b3AtaGVpZ2h0OjQwcHg7LS1oZWFkZXItaGVpZ2h0Ojk4cHg7LS1oZWFkZXItbGFiZWxzLWhlaWdodDo1MHB4Oy0taGVhZGVyLWRheS1oZWlnaHQ6MjRweDstLWV4LWhlYWRlci1oZWlnaHQ6MTIwcHg7LS1oZWFkZXItaW5wdXQtaGVpZ2h0OjIwcHg7LS1uYXYtd2lkdGg6MjAwcHg7LS1uYXYtaXRlbS1jb2wtd2lkdGg6NjBweDstLWluaXRpYWwtbmF2LXdpZHRoOjBweDstLWV4LW5hdi13aWR0aDowcHg7LS1idG4tbmF2LXdpZHRoOjExN3B4Oy0tbmF2LXJpZ2h0LXdpZHRoOjMwMHB4Oy0taXRlbS1taW4td2lkdGg6MTAwcHg7LS1pdGVtLWhlaWdodDo0NXB4Oy0tZGF5LXdpZHRoOjQ1cHg7LS1mb250LXNpemU6MTZweDstLW1vYmlsZS1mb290ZXItaGVpZ2h0OjUwcHh9QC13ZWJraXQta2V5ZnJhbWVzIHB1bHNlTWVzc2FnZXswJXtib3JkZXItY29sb3I6cmdiYSgyMTEsNDcsNDcsLjMpIHJnYmEoMjExLDQ3LDQ3LC4zKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudH10b3tib3JkZXItY29sb3I6I2QzMmYyZiAjZDMyZjJmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fX1Aa2V5ZnJhbWVzIHB1bHNlTWVzc2FnZXswJXtib3JkZXItY29sb3I6cmdiYSgyMTEsNDcsNDcsLjMpIHJnYmEoMjExLDQ3LDQ3LC4zKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudH10b3tib3JkZXItY29sb3I6I2QzMmYyZiAjZDMyZjJmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fX1ALXdlYmtpdC1rZXlmcmFtZXMgcHVsc2VCYWNrZ3JvdW5kezAle2JhY2tncm91bmQ6cmdiYSgyMTEsNDcsNDcsLjMpfXRve2JhY2tncm91bmQ6I2QzMmYyZn19QGtleWZyYW1lcyBwdWxzZUJhY2tncm91bmR7MCV7YmFja2dyb3VuZDpyZ2JhKDIxMSw0Nyw0NywuMyl9dG97YmFja2dyb3VuZDojZDMyZjJmfX1ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZy1mYXN0MXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9NDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgyMDAlKX19QGtleWZyYW1lcyBsb2FkaW5nLWZhc3QxezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX00MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX1ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZy1mYXN0MnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9MTUle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgyMDAlKX19QGtleWZyYW1lcyBsb2FkaW5nLWZhc3QyezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0xNSV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX0uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2RmNTU0YiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2RmNTU0Yn0uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmZGZhZjl9LmNhcGliYXJhLmMtcmVkOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNmZGZhZjk7Ym9yZGVyLWNvbG9yOiNmOTlkOTd9LmNhcGliYXJhLmMtcmVkOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZmRmYWY5O2JvcmRlci1ib3R0b20tY29sb3I6I2Y5OWQ5N30uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmZGZhZjkpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNmOTlkOTd9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojYmExNjBhfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYmExNjBhfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtcmVkIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLXJlZCA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1yZWQgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1yZWQgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1yZWQgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2IWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtcmVkIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNmNDQzMzYhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLXJlZCAudGltZXtib3JkZXItY29sb3I6cmdiYSgyNDQsNjcsNTQsLjYpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtcmVkIC50aW1lIC5zeW1ib2x7Y29sb3I6I2Y0NDMzNn0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcmVkIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmNDQzMzY7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNDQsNjcsNTQsLjIpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyNDQsNjcsNTQsLjYpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZjQ0MzM2O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjQ0LDY3LDU0LC4yKX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyNDQsNjcsNTQsLjYpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2Y0NDMzNjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI0NCw2Nyw1NCwuMil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2Y0NDMzNn0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNDQsNjcsNTQsLjIpfS5jYXBpYmFyYS5jLXJlZCAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZjQ0MzM2O2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjgpfS5jYXBpYmFyYS5jLXJlZCAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2Y0NDMzNn0uY2FwaWJhcmEuYy1yZWQgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjgpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtcmVkIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI0NCw2Nyw1NCwuNSl9LmNhcGliYXJhIC5jLXJlZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmNDQzMzYhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1yZWQtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNkMjE5MGIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1yZWQtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmODg3N2YhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1yZWQtLXRleHR7Y29sb3I6I2Y0NDMzNiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC1kLS10ZXh0e2NvbG9yOiNkMjE5MGIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1yZWQtbC0tdGV4dHtjb2xvcjojZjg4NzdmIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXJlZHtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKTtib3JkZXI6MXB4IHNvbGlkICNmNDQzMzZ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1yZWQgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNmNDQzMzZ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1yZWQgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNmNDQzMzY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyNDQsNjcsNTQsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcmVkIC5uYW1le2NvbG9yOiNmNDQzMzZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtcmVkey0tbG9jYWwtY29sb3I6I2Y0NDMzNjstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtcmVkLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1yZWQsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtcmVkIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNmNDQzMzZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcmVkLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC43KTtib3JkZXItY29sb3I6cmdiYSgyNDQsNjcsNTQsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcmVkLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1yZWQ6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtcmVke2JhY2tncm91bmQ6I2Y0NDMzNn0uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNkMDM3NmIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojZDAzNzZifS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmMGUzZTd9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZjBlM2U3O2JvcmRlci1jb2xvcjojZjI3YmEzfS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNmMGUzZTc7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZjI3YmEzfS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmMGUzZTcpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZjI3YmEzfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOTMwZTNifS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiM5MzBlM2J9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtcGluayA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzMsMzAsOTksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtcGluayA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtcGluayAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzMsMzAsOTksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtcGluayAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXBpbmsgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZTkxZTYzIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLXBpbmsgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzMsMzAsOTksLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2U5MWU2MyFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLXBpbmsgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC42KX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1waW5rIC50aW1lIC5zeW1ib2x7Y29sb3I6I2U5MWU2M30uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1waW5rIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZTkxZTYzO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMzLDMwLDk5LC4yKX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuNil9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZTkxZTYzO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMzLDMwLDk5LC4yKX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC42KX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2U5MWU2Mztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMywzMCw5OSwuMil9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZTkxZTYzfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzMsMzAsOTksLjIpfS5jYXBpYmFyYS5jLXBpbmsgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuOCl9LmNhcGliYXJhLmMtcGluayAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZTkxZTYzO2NvbG9yOiNlOTFlNjN9LmNhcGliYXJhLmMtcGluayAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjgpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLXBpbmsgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjMzLDMwLDk5LC41KX0uY2FwaWJhcmEgLmMtcGluay0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNlOTFlNjMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1waW5rLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYWExMTQ1IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcGluay1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2YwNjQ5MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXBpbmstLXRleHR7Y29sb3I6I2U5MWU2MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXBpbmstZC0tdGV4dHtjb2xvcjojYWExMTQ1IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcGluay1sLS10ZXh0e2NvbG9yOiNmMDY0OTMhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcGlua3tiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC4yKTtib3JkZXI6MXB4IHNvbGlkICNlOTFlNjN9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1waW5rIC5sZWZ0LWljb257YmFja2dyb3VuZDojZTkxZTYzfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcGluayAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2U5MWU2Mztib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDIzMywzMCw5OSwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1waW5rIC5uYW1le2NvbG9yOiNlOTFlNjN9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtcGlua3stLWxvY2FsLWNvbG9yOiNlOTFlNjM7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLXBpbmssLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLXBpbmssLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtcGluayAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojZTkxZTYzfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXBpbmsuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1waW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1waW5rOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLXBpbmt7YmFja2dyb3VuZDojZTkxZTYzfS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojOGQzZDliIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojOGQzZDlifS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2Q2Y2JkOH0uY2FwaWJhcmEuYy1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2Q2Y2JkODtib3JkZXItY29sb3I6I2NhNjFkY30uY2FwaWJhcmEuYy1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNkNmNiZDg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojY2E2MWRjfS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2Q2Y2JkOCkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2NhNjFkY30uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM1MjE0NWR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiM1MjE0NWR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1wdXJwbGUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLXB1cnBsZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtcHVycGxlIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLXB1cnBsZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXB1cnBsZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM5YzI3YjAhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1wdXJwbGUgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTYsMzksMTc2LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiM5YzI3YjAhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLXB1cnBsZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgxNTYsMzksMTc2LC42KX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLXB1cnBsZSAudGltZSAuc3ltYm9se2NvbG9yOiM5YzI3YjB9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXB1cnBsZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojOWMyN2IwO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTU2LDM5LDE3NiwuMil9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjYpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojOWMyN2IwO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTU2LDM5LDE3NiwuMil9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuNil9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojOWMyN2IwO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTU2LDM5LDE3NiwuMil9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzljMjdiMH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxNTYsMzksMTc2LC4yKX0uY2FwaWJhcmEuYy1wdXJwbGUgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzljMjdiMDtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuOCl9LmNhcGliYXJhLmMtcHVycGxlIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzljMjdiMDtjb2xvcjojOWMyN2IwfS5jYXBpYmFyYS5jLXB1cnBsZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjgpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtcHVycGxlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgxNTYsMzksMTc2LC41KX0uY2FwaWJhcmEgLmMtcHVycGxlLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzljMjdiMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXB1cnBsZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzY0MTk3MSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXB1cnBsZS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2MzNGNkNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXB1cnBsZS0tdGV4dHtjb2xvcjojOWMyN2IwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLWQtLXRleHR7Y29sb3I6IzY0MTk3MSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXB1cnBsZS1sLS10ZXh0e2NvbG9yOiNjMzRjZDchaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcHVycGxle2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC4yKTtib3JkZXI6MXB4IHNvbGlkICM5YzI3YjB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1wdXJwbGUgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiM5YzI3YjB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1wdXJwbGUgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICM5YzI3YjA7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgxNTYsMzksMTc2LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXB1cnBsZSAubmFtZXtjb2xvcjojOWMyN2IwfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLXB1cnBsZXstLWxvY2FsLWNvbG9yOiM5YzI3YjA7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLXB1cnBsZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtcHVycGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLXB1cnBsZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojOWMyN2IwfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXB1cnBsZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcHVycGxlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcHVycGxlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC4yKTtib3JkZXItY29sb3I6cmdiYSgxNTYsMzksMTc2LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtcHVycGxle2JhY2tncm91bmQ6IzljMjdiMH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojNmU1MjlmIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM2ZTUyOWZ9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNkZWRlZGZ9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2RlZGVkZjtib3JkZXItY29sb3I6IzlmODBkN30uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2RlZGVkZjtib3JkZXItYm90dG9tLWNvbG9yOiM5ZjgwZDd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNkZWRlZGYpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzlmODBkN30uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojM2IyMTZhfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzNiMjE2YX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojNjczYWI3IWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzY3M2FiNyFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC42KX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnRpbWUgLnN5bWJvbHtjb2xvcjojNjczYWI3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNjczYWI3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTAzLDU4LDE4MywuMil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuNil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzY3M2FiNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEwMyw1OCwxODMsLjIpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuNil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzY3M2FiNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEwMyw1OCwxODMsLjIpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjNjczYWI3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTAzLDU4LDE4MywuMil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojNjczYWI3O2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC44KX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzY3M2FiNztjb2xvcjojNjczYWI3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC44KX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDEwMyw1OCwxODMsLjUpfS5jYXBpYmFyYSAuYy1kZWVwLXB1cnBsZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM2NzNhYjchaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLXB1cnBsZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzQ2Mjg3ZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojOTE2ZGQxIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtLXRleHR7Y29sb3I6IzY3M2FiNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLWQtLXRleHR7Y29sb3I6IzQ2Mjg3ZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLWwtLXRleHR7Y29sb3I6IzkxNmRkMSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLXB1cnBsZXtiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuMik7Ym9yZGVyOjFweCBzb2xpZCAjNjczYWI3fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1wdXJwbGUgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiM2NzNhYjd9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLXB1cnBsZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzY3M2FiNztib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDEwMyw1OCwxODMsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1wdXJwbGUgLm5hbWV7Y29sb3I6IzY3M2FiN30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1kZWVwLXB1cnBsZXstLWxvY2FsLWNvbG9yOiM2NzNhYjc7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWRlZXAtcHVycGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1kZWVwLXB1cnBsZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1kZWVwLXB1cnBsZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojNjczYWI3fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtcHVycGxlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLXB1cnBsZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtcHVycGxlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC4yKTtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtZGVlcC1wdXJwbGV7YmFja2dyb3VuZDojNjczYWI3fS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojNTc2MjlkIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojNTc2MjlkfS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2UwZTBlMH0uY2FwaWJhcmEuYy1pbmRpZ286bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2UwZTBlMDtib3JkZXItY29sb3I6Izg1OTFkNX0uY2FwaWJhcmEuYy1pbmRpZ286bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNlMGUwZTA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojODU5MWQ1fS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2UwZTBlMCkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6Izg1OTFkNX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMyNTJmNjl9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMyNTJmNjl9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1pbmRpZ28gOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNjMsODEsMTgxLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtaW5kaWdvIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSg2Myw4MSwxODEsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWluZGlnbyAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSg2Myw4MSwxODEsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWluZGlnbyAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWluZGlnbyAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMzZjUxYjUhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1pbmRpZ28gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSg2Myw4MSwxODEsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzNmNTFiNSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtaW5kaWdvIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuNil9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1pbmRpZ28gLnRpbWUgLnN5bWJvbHtjb2xvcjojM2Y1MWI1fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28gLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnbyAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzNmNTFiNTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDYzLDgxLDE4MSwuMil9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuNil9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzZjUxYjU7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2Myw4MSwxODEsLjIpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuNil9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojM2Y1MWI1O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjMsODEsMTgxLC4yKX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjM2Y1MWI1fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDYzLDgxLDE4MSwuMil9LmNhcGliYXJhLmMtaW5kaWdvIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMzZjUxYjU7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuOCl9LmNhcGliYXJhLmMtaW5kaWdvIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzNmNTFiNTtjb2xvcjojM2Y1MWI1fS5jYXBpYmFyYS5jLWluZGlnbyAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuOCl9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1pbmRpZ28gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoNjMsODEsMTgxLC41KX0uY2FwaWJhcmEgLmMtaW5kaWdvLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzNmNTFiNSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWluZGlnby1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzJiMzg3YyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWluZGlnby1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzcyODBjZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWluZGlnby0tdGV4dHtjb2xvcjojM2Y1MWI1IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLWQtLXRleHR7Y29sb3I6IzJiMzg3YyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWluZGlnby1sLS10ZXh0e2NvbG9yOiM3MjgwY2UhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtaW5kaWdve2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjIpO2JvcmRlcjoxcHggc29saWQgIzNmNTFiNX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWluZGlnbyAubGVmdC1pY29ue2JhY2tncm91bmQ6IzNmNTFiNX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWluZGlnbyAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzNmNTFiNTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDYzLDgxLDE4MSwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1pbmRpZ28gLm5hbWV7Y29sb3I6IzNmNTFiNX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1pbmRpZ297LS1sb2NhbC1jb2xvcjojM2Y1MWI1Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1pbmRpZ28sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWluZGlnbywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1pbmRpZ28gLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzNmNTFiNX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1pbmRpZ28uYWN0aXZle2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1pbmRpZ28uYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWluZGlnbzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC4yKTtib3JkZXItY29sb3I6cmdiYSg2Myw4MSwxODEsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1pbmRpZ297YmFja2dyb3VuZDojM2Y1MWI1fS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzMxNzZiYiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiMzMTc2YmJ9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2QxZGNlNn0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNkMWRjZTY7Ym9yZGVyLWNvbG9yOiM2NGE5ZWR9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2QxZGNlNjtib3JkZXItYm90dG9tLWNvbG9yOiM2NGE5ZWR9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2QxZGNlNikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM2NGE5ZWR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMwZTQzNzd9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzBlNDM3N30uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ibHVlIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtYmx1ZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWJsdWUgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1ibHVlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYmx1ZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMxOTc2ZDIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtYmx1ZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzE5NzZkMiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWJsdWUgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuNil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtYmx1ZSAudGltZSAuc3ltYm9se2NvbG9yOiMxOTc2ZDJ9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzE5NzZkMjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1LDExOCwyMTAsLjIpfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuNil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojMTk3NmQyO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjUsMTE4LDIxMCwuMil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjYpfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMTk3NmQyO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjUsMTE4LDIxMCwuMil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjMTk3NmQyfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNSwxMTgsMjEwLC4yKX0uY2FwaWJhcmEuYy1ibHVlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojMTk3NmQyO2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC44KX0uY2FwaWJhcmEuYy1ibHVlIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7Y29sb3I6IzE5NzZkMn0uY2FwaWJhcmEuYy1ibHVlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjgpfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWJsdWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI1LDExOCwyMTAsLjUpfS5jYXBpYmFyYSAuYy1ibHVlLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzE5NzZkMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWUtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMxMTUwOGUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNGU5Y2VhIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZS0tdGV4dHtjb2xvcjojMTk3NmQyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZS1kLS10ZXh0e2NvbG9yOiMxMTUwOGUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlLWwtLXRleHR7Y29sb3I6IzRlOWNlYSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVle2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4yKTtib3JkZXI6MXB4IHNvbGlkICMxOTc2ZDJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlIC5sZWZ0LWljb257YmFja2dyb3VuZDojMTk3NmQyfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzE5NzZkMjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDI1LDExOCwyMTAsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZSAubmFtZXtjb2xvcjojMTk3NmQyfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWJsdWV7LS1sb2NhbC1jb2xvcjojMTk3NmQyOy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1ibHVlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1ibHVlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWJsdWUgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzE5NzZkMn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ibHVlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ibHVlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWJsdWV7YmFja2dyb3VuZDojMTk3NmQyfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzFjYTBkYiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiMxY2EwZGJ9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2QzZTdmMH0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNkM2U3ZjA7Ym9yZGVyLWNvbG9yOiM2MGNjZmR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2QzZTdmMDtib3JkZXItYm90dG9tLWNvbG9yOiM2MGNjZmR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2QzZTdmMCkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM2MGNjZmR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMwMjYzOGZ9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzAyNjM4Zn0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saWdodC1ibHVlIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saWdodC1ibHVlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgzLDE2OSwyNDQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMwM2E5ZjQhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMDNhOWY0IWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnRpbWUgLnN5bWJvbHtjb2xvcjojMDNhOWY0fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQ7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgzLDE2OSwyNDQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMywxNjksMjQ0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQ7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgzLDE2OSwyNDQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDNhOWY0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMywxNjksMjQ0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMwM2E5ZjR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDMsMTY5LDI0NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzAzYTlmNDtiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC44KX0uY2FwaWJhcmEuYy1saWdodC1ibHVlIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQ7Y29sb3I6IzAzYTlmNH0uY2FwaWJhcmEuYy1saWdodC1ibHVlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuOCl9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgzLDE2OSwyNDQsLjUpfS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAzYTlmNCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMjc1YTghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNDdjNGZkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtYmx1ZS0tdGV4dHtjb2xvcjojMDNhOWY0IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtYmx1ZS1kLS10ZXh0e2NvbG9yOiMwMjc1YTghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLWwtLXRleHR7Y29sb3I6IzQ3YzRmZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ibHVle2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjIpO2JvcmRlcjoxcHggc29saWQgIzAzYTlmNH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWJsdWUgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMwM2E5ZjR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ibHVlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjMDNhOWY0O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMywxNjksMjQ0LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWJsdWUgLm5hbWV7Y29sb3I6IzAzYTlmNH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1saWdodC1ibHVley0tbG9jYWwtY29sb3I6IzAzYTlmNDstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtbGlnaHQtYmx1ZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtbGlnaHQtYmx1ZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1saWdodC1ibHVlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMwM2E5ZjR9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtYmx1ZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMywxNjksMjQ0LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpZ2h0LWJsdWUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpZ2h0LWJsdWU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMywxNjksMjQ0LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtbGlnaHQtYmx1ZXtiYWNrZ3JvdW5kOiMwM2E5ZjR9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojMTVhY2JmIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzE1YWNiZn0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojYjllMmU4fS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2I5ZTJlODtib3JkZXItY29sb3I6IzNiZTlmZn0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojYjllMmU4O2JvcmRlci1ib3R0b20tY29sb3I6IzNiZTlmZn0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjYjllMmU4KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzNiZTlmZn0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzAwNjI2ZX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA2MjZlfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWN5YW4gOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxODgsMjEyLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWN5YW4gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWN5YW4gLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxODgsMjEyLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWN5YW4gLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1jeWFuIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzAwYmNkNCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1jeWFuIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxODgsMjEyLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMwMGJjZDQhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1jeWFuIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuNil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtY3lhbiAudGltZSAuc3ltYm9se2NvbG9yOiMwMGJjZDR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtY3lhbiAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtY3lhbiAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAwYmNkNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTg4LDIxMiwuMil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgwLDE4OCwyMTIsLjYpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzAwYmNkNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTg4LDIxMiwuMil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuNil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMGJjZDQ7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE4OCwyMTIsLjIpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzAwYmNkNH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxODgsMjEyLC4yKX0uY2FwaWJhcmEuYy1jeWFuIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojMDBiY2Q0O2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjgpfS5jYXBpYmFyYS5jLWN5YW4gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzAwYmNkNDtjb2xvcjojMDBiY2Q0fS5jYXBpYmFyYS5jLWN5YW4gLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC44KX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1jeWFuIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDAsMTg4LDIxMiwuNSl9LmNhcGliYXJhIC5jLWN5YW4tLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDBiY2Q0IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtY3lhbi1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAwNzg4OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWN5YW4tbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMyMmU2ZmYhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1jeWFuLS10ZXh0e2NvbG9yOiMwMGJjZDQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1jeWFuLWQtLXRleHR7Y29sb3I6IzAwNzg4OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWN5YW4tbC0tdGV4dHtjb2xvcjojMjJlNmZmIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWN5YW57YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuMik7Ym9yZGVyOjFweCBzb2xpZCAjMDBiY2Q0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtY3lhbiAubGVmdC1pY29ue2JhY2tncm91bmQ6IzAwYmNkNH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWN5YW4gLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICMwMGJjZDQ7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDE4OCwyMTIsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtY3lhbiAubmFtZXtjb2xvcjojMDBiY2Q0fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWN5YW57LS1sb2NhbC1jb2xvcjojMDBiY2Q0Oy0tbG9jYWwtY29sb3ItZm9udDojMjYzMjM4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1jeWFuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1jeWFuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWN5YW4gLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzAwYmNkNH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1jeWFuLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC43KTtib3JkZXItY29sb3I6cmdiYSgwLDE4OCwyMTIsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtY3lhbi5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtY3lhbjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC4yKTtib3JkZXItY29sb3I6cmdiYSgwLDE4OCwyMTIsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1jeWFue2JhY2tncm91bmQ6IzAwYmNkNH0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiMwZjg3N2MgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojMGY4NzdjfS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiM4YWQ4ZDF9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojOGFkOGQxO2JvcmRlci1jb2xvcjojMDBmY2U0fS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiM4YWQ4ZDE7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDBmY2U0fS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCM4YWQ4ZDEpIWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMDBmY2U0fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMDAzMDJjfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMwMDMwMmN9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtdGVhbCA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE1MCwxMzYsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtdGVhbCA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtdGVhbCAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE1MCwxMzYsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtdGVhbCAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXRlYWwgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojMDA5Njg4IWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLXRlYWwgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE1MCwxMzYsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzAwOTY4OCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLXRlYWwgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC42KX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy10ZWFsIC50aW1lIC5zeW1ib2x7Y29sb3I6IzAwOTY4OH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy10ZWFsIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA5Njg4O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxNTAsMTM2LC4yKX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuNil9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA5Njg4O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxNTAsMTM2LC4yKX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC42KX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAwOTY4ODtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTUwLDEzNiwuMil9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjMDA5Njg4fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE1MCwxMzYsLjIpfS5jYXBpYmFyYS5jLXRlYWwgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuOCl9LmNhcGliYXJhLmMtdGVhbCAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMDA5Njg4O2NvbG9yOiMwMDk2ODh9LmNhcGliYXJhLmMtdGVhbCAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjgpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLXRlYWwgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMCwxNTAsMTM2LC41KX0uY2FwaWJhcmEgLmMtdGVhbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMDk2ODghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy10ZWFsLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDA0YTQzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtdGVhbC1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAwZTNjZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXRlYWwtLXRleHR7Y29sb3I6IzAwOTY4OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXRlYWwtZC0tdGV4dHtjb2xvcjojMDA0YTQzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtdGVhbC1sLS10ZXh0e2NvbG9yOiMwMGUzY2QhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtdGVhbHtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC4yKTtib3JkZXI6MXB4IHNvbGlkICMwMDk2ODh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy10ZWFsIC5sZWZ0LWljb257YmFja2dyb3VuZDojMDA5Njg4fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtdGVhbCAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzAwOTY4ODtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDAsMTUwLDEzNiwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy10ZWFsIC5uYW1le2NvbG9yOiMwMDk2ODh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtdGVhbHstLWxvY2FsLWNvbG9yOiMwMDk2ODg7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLXRlYWwsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLXRlYWwsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtdGVhbCAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojMDA5Njg4fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXRlYWwuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy10ZWFsLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy10ZWFsOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLXRlYWx7YmFja2dyb3VuZDojMDA5Njg4fS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiMzZjZjNDEgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzNmNmM0MX0uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2JjYmNiY30uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojYmNiY2JjO2JvcmRlci1jb2xvcjojNTJiZjU3fS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojYmNiY2JjO2JvcmRlci1ib3R0b20tY29sb3I6IzUyYmY1N30uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2JjYmNiYykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojNTJiZjU3fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMxMzMyMTR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMTMzMjE0fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ncmVlbiA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSg0NiwxMjUsNTAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWdyZWVuIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSg0NiwxMjUsNTAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtZ3JlZW4gLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtZ3JlZW4gLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1ncmVlbiAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMyZTdkMzIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWdyZWVuIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMyZTdkMzIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtZ3JlZW4gLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC42KX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtZ3JlZW4gLnRpbWUgLnN5bWJvbHtjb2xvcjojMmU3ZDMyfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMmU3ZDMyO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNDYsMTI1LDUwLC4yKX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSg0NiwxMjUsNTAsLjYpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg0NiwxMjUsNTAsLjIpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC42KX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMmU3ZDMyO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNDYsMTI1LDUwLC4yKX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzJlN2QzMn0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDQ2LDEyNSw1MCwuMil9LmNhcGliYXJhLmMtZ3JlZW4gLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojMmU3ZDMyO2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjgpfS5jYXBpYmFyYS5jLWdyZWVuIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMmU3ZDMyO2NvbG9yOiMyZTdkMzJ9LmNhcGliYXJhLmMtZ3JlZW4gLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuOCl9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWdyZWVuIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDQ2LDEyNSw1MCwuNSl9LmNhcGliYXJhIC5jLWdyZWVuLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzJlN2QzMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWdyZWVuLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMTk0NTFjIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZ3JlZW4tbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0M2I1NDghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi0tdGV4dHtjb2xvcjojMmU3ZDMyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZ3JlZW4tZC0tdGV4dHtjb2xvcjojMTk0NTFjIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZ3JlZW4tbC0tdGV4dHtjb2xvcjojNDNiNTQ4IWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWdyZWVue2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjIpO2JvcmRlcjoxcHggc29saWQgIzJlN2QzMn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWdyZWVuIC5sZWZ0LWljb257YmFja2dyb3VuZDojMmU3ZDMyfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZ3JlZW4gLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICMyZTdkMzI7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSg0NiwxMjUsNTAsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZ3JlZW4gLm5hbWV7Y29sb3I6IzJlN2QzMn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1ncmVlbnstLWxvY2FsLWNvbG9yOiMyZTdkMzI7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWdyZWVuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1ncmVlbiwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1ncmVlbiAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojMmU3ZDMyfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWdyZWVuLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC43KTtib3JkZXItY29sb3I6cmdiYSg0NiwxMjUsNTAsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZ3JlZW4uYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWdyZWVuOmhvdmVye2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWdyZWVue2JhY2tncm91bmQ6IzJlN2QzMn0uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojODlhYjYyIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM4OWFiNjJ9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNlZGVkZWN9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2VkZWRlYztib3JkZXItY29sb3I6I2JjZGM5N30uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2VkZWRlYztib3JkZXItYm90dG9tLWNvbG9yOiNiY2RjOTd9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNlZGVkZWMpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2JjZGM5N30uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojNTc3ZDJhfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzU3N2QyYX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojOGJjMzRhIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzhiYzM0YSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAudGltZXtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnRpbWUgLnN5bWJvbHtjb2xvcjojOGJjMzRhfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojOGJjMzRhO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTM5LDE5NSw3NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzhiYzM0YTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEzOSwxOTUsNzQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzhiYzM0YTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEzOSwxOTUsNzQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjOGJjMzRhfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTM5LDE5NSw3NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojOGJjMzRhO2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC44KX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzhiYzM0YTtjb2xvcjojOGJjMzRhfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC44KX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDEzOSwxOTUsNzQsLjUpfS5jYXBpYmFyYSAuYy1saWdodC1ncmVlbi0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM4YmMzNGEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ncmVlbi1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzY0OTEzMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYjBkNjgzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tLXRleHR7Y29sb3I6IzhiYzM0YSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLWQtLXRleHR7Y29sb3I6IzY0OTEzMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLWwtLXRleHR7Y29sb3I6I2IwZDY4MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ncmVlbntiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjOGJjMzRhfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtZ3JlZW4gLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiM4YmMzNGF9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ncmVlbiAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzhiYzM0YTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDEzOSwxOTUsNzQsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtZ3JlZW4gLm5hbWV7Y29sb3I6IzhiYzM0YX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1saWdodC1ncmVlbnstLWxvY2FsLWNvbG9yOiM4YmMzNGE7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWxpZ2h0LWdyZWVuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1saWdodC1ncmVlbiwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1saWdodC1ncmVlbiAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojOGJjMzRhfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpZ2h0LWdyZWVuLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saWdodC1ncmVlbi5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpZ2h0LWdyZWVuOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC4yKTtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtbGlnaHQtZ3JlZW57YmFja2dyb3VuZDojOGJjMzRhfS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2JhYzU1MCB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNiYWM1NTB9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2YzZjNlZX0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNmM2YzZWU7Ym9yZGVyLWNvbG9yOiNlM2ViOTB9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2YzZjNlZTtib3JkZXItYm90dG9tLWNvbG9yOiNlM2ViOTB9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2YzZjNlZSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNlM2ViOTB9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM4OTk1MWF9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6Izg5OTUxYX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saW1lIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtbGltZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWxpbWUgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1saW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGltZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNjZGRjMzkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtbGltZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2NkZGMzOSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWxpbWUgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuNil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtbGltZSAudGltZSAuc3ltYm9se2NvbG9yOiNjZGRjMzl9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtbGltZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGltZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2NkZGMzOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIwNSwyMjAsNTcsLjIpfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuNil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojY2RkYzM5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjA1LDIyMCw1NywuMil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjYpfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojY2RkYzM5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjA1LDIyMCw1NywuMil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjY2RkYzM5fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMDUsMjIwLDU3LC4yKX0uY2FwaWJhcmEuYy1saW1lIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojY2RkYzM5O2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC44KX0uY2FwaWJhcmEuYy1saW1lIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7Y29sb3I6I2NkZGMzOX0uY2FwaWJhcmEuYy1saW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjgpfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWxpbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDIwNSwyMjAsNTcsLjUpfS5jYXBpYmFyYSAuYy1saW1lLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2NkZGMzOSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpbWUtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM5ZGFhMWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saW1lLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZGRlNzdhIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGltZS0tdGV4dHtjb2xvcjojY2RkYzM5IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGltZS1kLS10ZXh0e2NvbG9yOiM5ZGFhMWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saW1lLWwtLXRleHR7Y29sb3I6I2RkZTc3YSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saW1le2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC4yKTtib3JkZXI6MXB4IHNvbGlkICNjZGRjMzl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saW1lIC5sZWZ0LWljb257YmFja2dyb3VuZDojY2RkYzM5fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGltZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2NkZGMzOTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDIwNSwyMjAsNTcsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGltZSAubmFtZXtjb2xvcjojY2RkYzM5fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWxpbWV7LS1sb2NhbC1jb2xvcjojY2RkYzM5Oy0tbG9jYWwtY29sb3ItZm9udDojMjYzMjM4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1saW1lLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1saW1lLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWxpbWUgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2NkZGMzOX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saW1lLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saW1lLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGltZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWxpbWV7YmFja2dyb3VuZDojY2RkYzM5fS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojYmNhMjRmIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojYmNhMjRmfS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2VlZWRlOX0uY2FwaWJhcmEuYy15ZWxsb3c6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2VlZWRlOTtib3JkZXItY29sb3I6I2U2ZDE4Yn0uY2FwaWJhcmEuYy15ZWxsb3c6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNlZWVkZTk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZTZkMThifS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2VlZWRlOSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2U2ZDE4Yn0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM4ODZmMWR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiM4ODZmMWR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy15ZWxsb3cgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjEyLDE3NSw1NSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLXllbGxvdyA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjEyLDE3NSw1NSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMteWVsbG93IC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIxMiwxNzUsNTUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLXllbGxvdyAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXllbGxvdyAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNkNGFmMzchaW1wb3J0YW50fS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy15ZWxsb3cgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyMTIsMTc1LDU1LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNkNGFmMzchaW1wb3J0YW50fS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLXllbGxvdyAudGltZXtib3JkZXItY29sb3I6cmdiYSgyMTIsMTc1LDU1LC42KX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLXllbGxvdyAudGltZSAuc3ltYm9se2NvbG9yOiNkNGFmMzd9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXllbGxvdyAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93IC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZDRhZjM3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjEyLDE3NSw1NSwuMil9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDIxMiwxNzUsNTUsLjYpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZDRhZjM3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjEyLDE3NSw1NSwuMil9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjEyLDE3NSw1NSwuNil9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZDRhZjM3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjEyLDE3NSw1NSwuMil9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2Q0YWYzN30uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMTIsMTc1LDU1LC4yKX0uY2FwaWJhcmEuYy15ZWxsb3cgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2Q0YWYzNztiYWNrZ3JvdW5kOnJnYmEoMjEyLDE3NSw1NSwuOCl9LmNhcGliYXJhLmMteWVsbG93IC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2Q0YWYzNztjb2xvcjojZDRhZjM3fS5jYXBpYmFyYS5jLXllbGxvdyAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDIxMiwxNzUsNTUsLjgpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMteWVsbG93IC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDIxMiwxNzUsNTUsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyMTIsMTc1LDU1LC41KX0uY2FwaWJhcmEgLmMteWVsbG93LS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2Q0YWYzNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXllbGxvdy1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzlkODAyMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXllbGxvdy1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2UyYzg3NiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXllbGxvdy0tdGV4dHtjb2xvcjojZDRhZjM3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LWQtLXRleHR7Y29sb3I6IzlkODAyMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXllbGxvdy1sLS10ZXh0e2NvbG9yOiNlMmM4NzYhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMteWVsbG93e2JhY2tncm91bmQ6cmdiYSgyMTIsMTc1LDU1LC4yKTtib3JkZXI6MXB4IHNvbGlkICNkNGFmMzd9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy15ZWxsb3cgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNkNGFmMzd9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy15ZWxsb3cgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNkNGFmMzc7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyMTIsMTc1LDU1LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXllbGxvdyAubmFtZXtjb2xvcjojZDRhZjM3fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLXllbGxvd3stLWxvY2FsLWNvbG9yOiNkNGFmMzc7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLXllbGxvdywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMteWVsbG93LC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLXllbGxvdyAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojZDRhZjM3fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXllbGxvdy5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDIxMiwxNzUsNTUsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDIxMiwxNzUsNTUsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMteWVsbG93LmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjEyLDE3NSw1NSwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMteWVsbG93OmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMTIsMTc1LDU1LC4yKTtib3JkZXItY29sb3I6cmdiYSgyMTIsMTc1LDU1LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMteWVsbG93e2JhY2tncm91bmQ6I2Q0YWYzN30uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojZTZiNTIwIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNlNmI1MjB9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmNGVmZGV9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2Y0ZWZkZTtib3JkZXItY29sb3I6I2ZmZGI2ZH0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2Y0ZWZkZTtib3JkZXItYm90dG9tLWNvbG9yOiNmZmRiNmR9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmNGVmZGUpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2ZmZGI2ZH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojYTA3ODAwfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6I2EwNzgwMH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtYW1iZXIgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1hbWJlciA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWFtYmVyIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWFtYmVyIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYW1iZXIgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZmZjMTA3IWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1hbWJlciBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZmZjMTA3IWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWFtYmVyIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuNil9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWFtYmVyIC50aW1lIC5zeW1ib2x7Y29sb3I6I2ZmYzEwN30uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlciAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2ZmYzEwNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxOTMsNywuMil9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC42KX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZmZjMTA3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE5Myw3LC4yKX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuNil9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2ZmYzEwNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxOTMsNywuMil9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNmZmMxMDd9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTkzLDcsLjIpfS5jYXBpYmFyYS5jLWFtYmVyIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2ZmYzEwNztiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC44KX0uY2FwaWJhcmEuYy1hbWJlciAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2ZmYzEwNztjb2xvcjojZmZjMTA3fS5jYXBpYmFyYS5jLWFtYmVyIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjgpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1hbWJlciAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyNTUsMTkzLDcsLjUpfS5jYXBpYmFyYSAuYy1hbWJlci0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmZmMxMDchaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1hbWJlci1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2JhOGIwMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWFtYmVyLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmZkNDU0IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItLXRleHR7Y29sb3I6I2ZmYzEwNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWFtYmVyLWQtLXRleHR7Y29sb3I6I2JhOGIwMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWFtYmVyLWwtLXRleHR7Y29sb3I6I2ZmZDQ1NCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1hbWJlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC4yKTtib3JkZXI6MXB4IHNvbGlkICNmZmMxMDd9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1hbWJlciAubGVmdC1pY29ue2JhY2tncm91bmQ6I2ZmYzEwN30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWFtYmVyIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZmZjMTA3O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDE5Myw3LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWFtYmVyIC5uYW1le2NvbG9yOiNmZmMxMDd9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtYW1iZXJ7LS1sb2NhbC1jb2xvcjojZmZjMTA3Oy0tbG9jYWwtY29sb3ItZm9udDojMjYzMjM4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1hbWJlciwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtYW1iZXIsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtYW1iZXIgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2ZmYzEwN30uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1hbWJlci5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWFtYmVyLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1hbWJlcjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC4yKTtib3JkZXItY29sb3I6cmdiYSgyNTUsMTkzLDcsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1hbWJlcntiYWNrZ3JvdW5kOiNmZmMxMDd9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNlNjkzMWEgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNlNjkzMWF9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZjJlOGQ5fS5jYXBpYmFyYS5jLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZjJlOGQ5O2JvcmRlci1jb2xvcjojZmZjMTY2fS5jYXBpYmFyYS5jLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2YyZThkOTtib3JkZXItYm90dG9tLWNvbG9yOiNmZmMxNjZ9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZjJlOGQ5KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZmZjMTY2fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6Izk5NWIwMH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6Izk5NWIwMH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLW9yYW5nZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1vcmFuZ2UgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtb3JhbmdlIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtb3JhbmdlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtb3JhbmdlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLW9yYW5nZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZmY5ODAwIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC42KX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLW9yYW5nZSAudGltZSAuc3ltYm9se2NvbG9yOiNmZjk4MDB9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZmY5ODAwO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE1MiwwLC4yKX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC42KX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6I2ZmOTgwMDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxNTIsMCwuMil9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC42KX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZjk4MDA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTUyLDAsLjIpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNmZjk4MDB9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE1MiwwLC4yKX0uY2FwaWJhcmEuYy1vcmFuZ2UgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2ZmOTgwMDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC44KX0uY2FwaWJhcmEuYy1vcmFuZ2UgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZjk4MDB9LmNhcGliYXJhLmMtb3JhbmdlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC44KX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLW9yYW5nZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyNTUsMTUyLDAsLjUpfS5jYXBpYmFyYSAuYy1vcmFuZ2UtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmY5ODAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtb3JhbmdlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYjM2YTAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtb3JhbmdlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmZiNzRkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtb3JhbmdlLS10ZXh0e2NvbG9yOiNmZjk4MDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtZC0tdGV4dHtjb2xvcjojYjM2YTAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtb3JhbmdlLWwtLXRleHR7Y29sb3I6I2ZmYjc0ZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1vcmFuZ2V7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjZmY5ODAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtb3JhbmdlIC5sZWZ0LWljb257YmFja2dyb3VuZDojZmY5ODAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtb3JhbmdlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZmY5ODAwO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDE1MiwwLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLW9yYW5nZSAubmFtZXtjb2xvcjojZmY5ODAwfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLW9yYW5nZXstLWxvY2FsLWNvbG9yOiNmZjk4MDA7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLW9yYW5nZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtb3JhbmdlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLW9yYW5nZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojZmY5ODAwfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLW9yYW5nZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLW9yYW5nZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtb3JhbmdlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLW9yYW5nZXtiYWNrZ3JvdW5kOiNmZjk4MDB9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2NkNTczMyB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojY2Q1NzMzfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZWRlMWRlfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNlZGUxZGU7Ym9yZGVyLWNvbG9yOiNmMDkyNzV9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNlZGUxZGU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZjA5Mjc1fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZWRlMWRlKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNmMDkyNzV9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzhhMmMwZn0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiM4YTJjMGZ9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzAsNzQsMjUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2U2NGExOSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2Ugc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzAsNzQsMjUsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2U2NGExOSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgyMzAsNzQsMjUsLjYpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAudGltZSAuc3ltYm9se2NvbG9yOiNlNjRhMTl9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlNjRhMTk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzAsNzQsMjUsLjIpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6I2U2NGExOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMCw3NCwyNSwuMil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyMzAsNzQsMjUsLjYpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlNjRhMTk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzAsNzQsMjUsLjIpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZTY0YTE5fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMwLDc0LDI1LC4yKX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNlNjRhMTk7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuOCl9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNlNjRhMTk7Y29sb3I6I2U2NGExOX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC44KX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjMwLDc0LDI1LC41KX0uY2FwaWJhcmEgLmMtZGVlcC1vcmFuZ2UtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZTY0YTE5IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1vcmFuZ2UtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNhMTM0MTIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2VlODA1ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLS10ZXh0e2NvbG9yOiNlNjRhMTkhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS1kLS10ZXh0e2NvbG9yOiNhMTM0MTIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS1sLS10ZXh0e2NvbG9yOiNlZTgwNWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1vcmFuZ2V7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuMik7Ym9yZGVyOjFweCBzb2xpZCAjZTY0YTE5fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1vcmFuZ2UgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNlNjRhMTl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLW9yYW5nZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2U2NGExOTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDIzMCw3NCwyNSwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLW9yYW5nZSAubmFtZXtjb2xvcjojZTY0YTE5fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWRlZXAtb3Jhbmdley0tbG9jYWwtY29sb3I6I2U2NGExOTstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtZGVlcC1vcmFuZ2UsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWRlZXAtb3JhbmdlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWRlZXAtb3JhbmdlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNlNjRhMTl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1vcmFuZ2UuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLW9yYW5nZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1vcmFuZ2U6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtZGVlcC1vcmFuZ2V7YmFja2dyb3VuZDojZTY0YTE5fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM2NjVlNWIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzY2NWU1Yn0uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2M3YzdjN30uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojYzdjN2M3O2JvcmRlci1jb2xvcjojYWY4Nzc4fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojYzdjN2M3O2JvcmRlci1ib3R0b20tY29sb3I6I2FmODc3OH0uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2M3YzdjNykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojYWY4Nzc4fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMzOTI4MjJ9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzkyODIyfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1icm93biA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMjEsODUsNzIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJyb3duIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMjEsODUsNzIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtYnJvd24gLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtYnJvd24gLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1icm93biAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM3OTU1NDghaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWJyb3duIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiM3OTU1NDghaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtYnJvd24gLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC42KX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtYnJvd24gLnRpbWUgLnN5bWJvbHtjb2xvcjojNzk1NTQ4fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNzk1NTQ4O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTIxLDg1LDcyLC4yKX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgxMjEsODUsNzIsLjYpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMjEsODUsNzIsLjIpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC42KX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNzk1NTQ4O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTIxLDg1LDcyLC4yKX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzc5NTU0OH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEyMSw4NSw3MiwuMil9LmNhcGliYXJhLmMtYnJvd24gLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojNzk1NTQ4O2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjgpfS5jYXBpYmFyYS5jLWJyb3duIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojNzk1NTQ4O2NvbG9yOiM3OTU1NDh9LmNhcGliYXJhLmMtYnJvd24gLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuOCl9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWJyb3duIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDEyMSw4NSw3MiwuNSl9LmNhcGliYXJhIC5jLWJyb3duLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6Izc5NTU0OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJyb3duLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNDkzMzJiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYnJvd24tbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNhNTc4NjghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi0tdGV4dHtjb2xvcjojNzk1NTQ4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYnJvd24tZC0tdGV4dHtjb2xvcjojNDkzMzJiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYnJvd24tbC0tdGV4dHtjb2xvcjojYTU3ODY4IWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJyb3due2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjIpO2JvcmRlcjoxcHggc29saWQgIzc5NTU0OH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJyb3duIC5sZWZ0LWljb257YmFja2dyb3VuZDojNzk1NTQ4fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYnJvd24gLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICM3OTU1NDg7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgxMjEsODUsNzIsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYnJvd24gLm5hbWV7Y29sb3I6Izc5NTU0OH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1icm93bnstLWxvY2FsLWNvbG9yOiM3OTU1NDg7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWJyb3duLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1icm93biwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1icm93biAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojNzk1NTQ4fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJyb3duLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC43KTtib3JkZXItY29sb3I6cmdiYSgxMjEsODUsNzIsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYnJvd24uYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJyb3duOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWJyb3due2JhY2tncm91bmQ6Izc5NTU0OH0uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6Izc2NzY3NiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6Izc2NzY3Nn0uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNkY2RjZGN9LmNhcGliYXJhLmMtYmx1ZV9ncmV5Om5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNkY2RjZGM7Ym9yZGVyLWNvbG9yOiM5OWFlYjh9LmNhcGliYXJhLmMtYmx1ZV9ncmV5Om5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZGNkY2RjO2JvcmRlci1ib3R0b20tY29sb3I6Izk5YWViOH0uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNkY2RjZGMpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM5OWFlYjh9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMzY0NzRmfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzY0NzRmfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtYmx1ZV9ncmV5IDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSg5NiwxMjUsMTM5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojNjA3ZDhiIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojNjA3ZDhiIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuNil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnRpbWUgLnN5bWJvbHtjb2xvcjojNjA3ZDhifS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzYwN2Q4Yjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDk2LDEyNSwxMzksLjIpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSg5NiwxMjUsMTM5LC42KX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzYwN2Q4Yjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDk2LDEyNSwxMzksLjIpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjYpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzYwN2Q4Yjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDk2LDEyNSwxMzksLjIpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICM2MDdkOGJ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoOTYsMTI1LDEzOSwuMil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM2MDdkOGI7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjgpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiM2MDdkOGI7Y29sb3I6IzYwN2Q4Yn0uY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC44KX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoOTYsMTI1LDEzOSwuNSl9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM2MDdkOGIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlX2dyZXktZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0MTU0NWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlX2dyZXktbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM4YWEyYWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlX2dyZXktLXRleHR7Y29sb3I6IzYwN2Q4YiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS1kLS10ZXh0e2NvbG9yOiM0MTU0NWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlX2dyZXktbC0tdGV4dHtjb2xvcjojOGFhMmFlIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWVfZ3JleXtiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuMik7Ym9yZGVyOjFweCBzb2xpZCAjNjA3ZDhifS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZV9ncmV5IC5sZWZ0LWljb257YmFja2dyb3VuZDojNjA3ZDhifS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZV9ncmV5IC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjNjA3ZDhiO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoOTYsMTI1LDEzOSwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlX2dyZXkgLm5hbWV7Y29sb3I6IzYwN2Q4Yn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1ibHVlX2dyZXl7LS1sb2NhbC1jb2xvcjojNjA3ZDhiOy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1ibHVlX2dyZXksLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWJsdWVfZ3JleSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1ibHVlX2dyZXkgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzYwN2Q4Yn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ibHVlX2dyZXkuYWN0aXZle2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC43KTtib3JkZXItY29sb3I6cmdiYSg5NiwxMjUsMTM5LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWVfZ3JleS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWVfZ3JleTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWJsdWVfZ3JleXtiYWNrZ3JvdW5kOiM2MDdkOGJ9LmNhcGliYXJhICosLmNhcGliYXJhIDphZnRlciwuY2FwaWJhcmEgOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmNhcGliYXJhIGlucHV0e291dGxpbmU6bm9uZX0uY2FwaWJhcmEgaW5wdXRbdHlwZT1udW1iZXJdey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwuY2FwaWJhcmEgaW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl06Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eToxfS5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl06LW1zLWlucHV0LXBsYWNlaG9sZGVye29wYWNpdHk6MX0uY2FwaWJhcmEgaW5wdXRbdHlwZT1udW1iZXJdOjpwbGFjZWhvbGRlcntvcGFjaXR5OjF9LmNhcGliYXJhLmRhcmstdGhlbWUgLmhpZGUtZGFyaywuY2FwaWJhcmE6bm90KC5kYXJrLXRoZW1lKSAuaGlkZS1saWdodHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAudHJ1bmNhdGV7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmNhcGliYXJhIC5oaWRle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmNhcGliYXJhIC50ZXh0LXRpdGxle2ZvbnQtc2l6ZToxLjI1ZW07Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjouNWVtIC4zZW19LmNhcGliYXJhIC50ZXh0LXN1YnRpdGxle2ZvbnQtc2l6ZTouODc1ZW07Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjouNWVtIC4zZW07ZmxleDowIDAgYXV0b30uY2FwaWJhcmEgLnRleHQtaGludHtmb250LXNpemU6Ljc1ZW07bWFyZ2luOi4zZW07dGV4dC1hbGlnbjpsZWZ0O2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2FwaWJhcmEgLnRleHQtc3VidGl0bGUtMntmb250LXNpemU6Ljc1ZW07bWFyZ2luOi41ZW0gLjNlbTtmbGV4OjAgMCBhdXRvfS5jYXBpYmFyYSAuZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNhcGliYXJhIC5kLWJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5kLWZsZXh7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo5NjBweCl7LmNhcGliYXJhOm5vdCguZm9yY2UtbW9iaWxlKSAuYy1kLWRlc2t0b3Atbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYTpub3QoLmZvcmNlLW1vYmlsZSkgLmMtZC1kZXNrdG9wLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhOm5vdCguZm9yY2UtbW9iaWxlKSAuYy1kLWRlc2t0b3AtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhOm5vdCguZm9yY2UtbW9iaWxlKSAuYy1kLWRlc2t0b3AtZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk1OXB4KXsuY2FwaWJhcmEgLmMtZC1tb2JpbGUtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kLW1vYmlsZS1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWQtbW9iaWxlLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kLW1vYmlsZS1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX0uY2FwaWJhcmEuZm9yY2UtbW9iaWxlIC5jLWQtbW9iaWxlLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEuZm9yY2UtbW9iaWxlIC5jLWQtbW9iaWxlLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uY2FwaWJhcmEuZm9yY2UtbW9iaWxlIC5jLWQtbW9iaWxlLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jYXBpYmFyYS5mb3JjZS1tb2JpbGUgLmMtZC1tb2JpbGUtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uY2FwaWJhcmEuZm9yY2UtbW9iaWxlIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYXtzY3JvbGxiYXItd2lkdGg6YXV0b30uY2FwaWJhcmEgOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O29wYWNpdHk6LjV9LmNhcGliYXJhIDo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC5jYXBpYmFyYSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNre2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmNhcGliYXJhIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7Ym9yZGVyLXJhZGl1czo1cHg7YmFja2dyb3VuZDpncmV5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIDo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC5jYXBpYmFyYS5kYXJrLXRoZW1lIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY2FwaWJhcmEuZGFyay10aGVtZSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2JkYmRiZH0uY2FwaWJhcmF7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1mYW1pbHk6Um9ib3RvLHNhbnMtc2VyaWY7aGVpZ2h0OmluaGVyaXQ7bWF4LWhlaWdodDppbmhlcml0O292ZXJmbG93OmhpZGRlbjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZTp2YXIoLS1mb250LXNpemUpfS5jYXBpYmFyYSBwcmV7Zm9udC1mYW1pbHk6Um9ib3RvLHNhbnMtc2VyaWYhaW1wb3J0YW50fS5jYXBpYmFyYXtjb2xvcjojMzc0NzRmO2JhY2tncm91bmQ6I2Y1ZjVmNX0uY2FwaWJhcmEuZGFyay10aGVtZXtjb2xvcjojZjBmMGYwO2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEgLmNvbnRhaW5lci10bHt3aWR0aDoxMDAlO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkpO21heC1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOjA7d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9ufS5jYXBpYmFyYS5leHRlbmRlZC1yaWdodCAuY29udGFpbmVyLXRse3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW5hdi1yaWdodC13aWR0aCkpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRse2JhY2tncm91bmQ6I2Y1ZjVmNX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRse2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudG9kYXktbGluZXt3aWR0aDowO3Bvc2l0aW9uOmFic29sdXRlfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50b2RheS1saW5lLmRpc2FibGUtbGluZSwuY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudG9kYXktbGluZS5kaXNhYmxlLWxpbmU6YWZ0ZXJ7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudG9kYXktbGluZTphZnRlcnttYXJnaW4tbGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkgKyAxcHgpO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7bGVmdDowO3RvcDowO2NvbnRlbnQ6XFxcIlxcXCI7d2lkdGg6MnB4O2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgxODMsMjgsMjgsLjQpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsLmhlYWRlci1leHRlbmRlZCAuY29udGFpbmVyLXRsIC50b2RheS1saW5lOmFmdGVye2hlaWdodDpjYWxjKDEwMHZoIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSl9LmNhcGliYXJhIC5jb3JuZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOnZhcigtLWhlYWRlci10b3AtaGVpZ2h0KTt6LWluZGV4OjQ7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO2JvcmRlcjpzb2xpZCByZ2JhKDAsMCwwLC40KTtib3JkZXItd2lkdGg6MCAwIDJweDtwYWRkaW5nLWxlZnQ6OHB4fS5jYXBpYmFyYSAuY29ybmVyOm5vdCgucmlnaHQpe2xlZnQ6MDtib3JkZXItcmlnaHQtd2lkdGg6MXB4O3dpZHRoOmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSl9LmNhcGliYXJhIC5jb3JuZXIucmlnaHR7cmlnaHQ6MDt3aWR0aDp2YXIoLS1uYXYtcmlnaHQtd2lkdGgpO2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmNvcm5lcj5kaXY6bm90KFtjbGFzc10pe3dpZHRoOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXR9LmNhcGliYXJhIC5jb3JuZXIgLmJ0bi1jb250YWluZXJ7cGFkZGluZy10b3A6LjVlbX0uY2FwaWJhcmEgLmNvcm5lciAuYnRuLWNvbnRhaW5lciAuY29ybmVyLWJ0bntmb250LXNpemU6LjgyNWVtO21hcmdpbjowIDRweDtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIC5jb3JuZXIgLmNvcm5lci10aXRsZXtoZWlnaHQ6aW5oZXJpdDtkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246bGVmdDtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmNvcm5lciAuY29ybmVyLXRpdGxlIHNwYW4uYm90dG9tLXRleHR7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTo4cHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NTlweCl7LmNhcGliYXJhIC5jb3JuZXIgLmNvcm5lci10aXRsZXtmb250LXNpemU6Ljc1ZW19fS5jYXBpYmFyYSAuY29ybmVyIC5pbml0aWFsLWNvcm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLW5hdi13aWR0aCk7dG9wOjA7d2lkdGg6dmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpO2hlaWdodDp2YXIoLS1oZWFkZXItaGVpZ2h0KTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmNvcm5lciAuaW5pdGlhbC1jb3JuZXIgLmluaXRpYWwtY29ybmVyLXRpdGxle2hlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0Oi0xcHg7Ym94LXNpemluZzpib3JkZXItYm94O3ZlcnRpY2FsLWFsaWduOnRvcDtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmNvcm5lciAuaW5pdGlhbC1jb3JuZXIgLmluaXRpYWwtY29ybmVyLXRpdGxlIC5ib3R0b20tY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206OHB4O3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNhcGliYXJhIC5jb3JuZXIgLmluaXRpYWwtY29ybmVyIC5pbml0aWFsLWNvcm5lci10aXRsZSAuYm90dG9tLWNvbnRhaW5lciAuaXRlbS1jb2x7ZmxleDowIDAgdmFyKC0tbmF2LWl0ZW0tY29sLXdpZHRoKTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6Ljc1ZW19LmNhcGliYXJhIC5jb3JuZXIgLmV4dGVuZC1jb3JuZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkpO3RvcDowO3dpZHRoOnZhcigtLWV4LW5hdi13aWR0aCk7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYSAuY29ybmVyIC5leHRlbmQtY29ybmVyIC5leC1jb3JuZXItdGl0bGV7aGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LTFweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dmVydGljYWwtYWxpZ246dG9wO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29ybmVyIC5leHRlbmQtY29ybmVyIC5leC1jb3JuZXItdGl0bGUgLmJvdHRvbS1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTo4cHg7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2FwaWJhcmEgLmNvcm5lciAuZXh0ZW5kLWNvcm5lciAuZXgtY29ybmVyLXRpdGxlIC5ib3R0b20tY29udGFpbmVyIC5pdGVtLWNvbHtmbGV4OjAgMCB2YXIoLS1uYXYtaXRlbS1jb2wtd2lkdGgpO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTouNzVlbX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6dmFyKC0tYnRuLW5hdi13aWR0aCk7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO21pbi13aWR0aDoxMDBweDtwYWRkaW5nLXRvcDp2YXIoLS1oZWFkZXItbGFiZWxzLWhlaWdodCl9LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVze3RleHQtYWxpZ246cmlnaHQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDp2YXIoLS1oZWFkZXItbGFiZWxzLWhlaWdodCl9LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czozcHh9LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXI6bm90KC5wZXJzaXN0ZW50KXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXIuaW5wdXQtdGl0bGUtLWFjY2VudCAuaW5wdXQtdGl0bGV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOmdyZXl9LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXIgc3Bhbi5hdmVyYWdle2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tcmlnaHQ6NHB4O3BhZGRpbmc6M3B4fS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyIC5pbnB1dC10aXRsZXtoZWlnaHQ6Y2FsYyh2YXIoLS1oZWFkZXItaW5wdXQtaGVpZ2h0KSArIDNweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1oZWFkZXItaW5wdXQtaGVpZ2h0KSArIDJweCk7cGFkZGluZy1yaWdodDo4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOi43NWVtfS5jYXBpYmFyYS5leHRlbmRlZC1yaWdodCAuY29ybmVyLnJpZ2h0e2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyLC5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyLC5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuZXh0ZW5kLWNvcm5lciwuY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIgLmluaXRpYWwtY29ybmVye2hlaWdodDpjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcjpub3QoLnBlcnNpc3RlbnQpe2Rpc3BsYXk6dW5zZXR9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyOm5vdCgucGVyc2lzdGVudCkgLmF2ZXJhZ2UtYm94e3Zpc2liaWxpdHk6dmlzaWJsZX0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXI6bm90KC5wZXJzaXN0ZW50KSAuaW5wdXQtdGl0bGV7dmlzaWJpbGl0eTp2aXNpYmxlO2hlaWdodDphdXRvfS5jYXBpYmFyYSAuY29ybmVye2JhY2tncm91bmQ6I2YxZmZmZX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29ybmVye2JhY2tncm91bmQ6IzMxM2I1MDtib3JkZXItY29sb3I6cmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyIC5pbnB1dC10aXRsZXtjb2xvcjpoc2xhKDAsMCUsMTAwJSwuOCkhaW1wb3J0YW50fS5jYXBpYmFyYSAuaGVhZGVyLXRvcHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2hlaWdodDp2YXIoLS1oZWFkZXItdG9wLWhlaWdodCk7cGFkZGluZzowIC41ZW07ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDt6LWluZGV4OjV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5zcGFjZXJ7ZmxleDoxIDAgYXV0b30uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIGhzbGEoMCwwJSw0My41JSwuMyk7bWFyZ2luLXJpZ2h0Oi41ZW19LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lcjpub3QoOmVtcHR5KXtwYWRkaW5nOjB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciBidXR0b24udGFie2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjI1ZW0gMWVtO2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbjouNWVtIC41ZW0gMCAwO2JvcmRlci1yYWRpdXM6MzBweDt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzIGVhc2U7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIGJ1dHRvbi50YWI6Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAzcHggcmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciBidXR0b24udGFiLmRpc2FibGVke2NvbG9yOmdyZXl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciBidXR0b24udGFiOmhvdmVye2JvcmRlci1jb2xvcjpncmV5fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXJ7ZGlzcGxheTpmbGV4fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1yaWdodDoxZW07Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouOGVtIC41ZW0gLjVlbSAwfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZDpub3QoLmFjdGl2ZSl7b3BhY2l0eTouNX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyIC5sZWdlbmQ6bm90KC5hY3RpdmUpIC5pY29uLWxlZ2VuZHtiYWNrZ3JvdW5kOmdyZXkhaW1wb3J0YW50fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZCAuaWNvbi1sZWdlbmR7d2lkdGg6LjgyNWVtO2hlaWdodDouODI1ZW07bWFyZ2luOjJweCAuNWVtIDJweCAwO2JhY2tncm91bmQ6Z3JleTtib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC40KTtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjFweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjQpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZCAuaWNvbi1sZWdlbmQuY2lyY2xle2JvcmRlci1yYWRpdXM6NTAlfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZDpob3ZlciBzcGFue3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lci5mb3JjZS1tb2JpbGUtc3R5bGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoyZW07dG9wOjJlbTtiYWNrZ3JvdW5kOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDo2O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuNCk7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKSFpbXBvcnRhbnR9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lci5mb3JjZS1tb2JpbGUtc3R5bGUgLmxlZ2VuZHtmb250LXNpemU6MTZweDtwYWRkaW5nOi41ZW19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NTlweCl7LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjJlbTt0b3A6MmVtO2JhY2tncm91bmQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjY7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC40KTtib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpIWltcG9ydGFudH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyIC5sZWdlbmR7Zm9udC1zaXplOjE2cHg7cGFkZGluZzouNWVtfX0uY2FwaWJhcmEgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZjFmZmZlfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYntjb2xvcjojMzEzYjUwfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYi5kaXNhYmxlZHtjb2xvcjpyZ2JhKDQ5LDU5LDgwLC41KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiMzMTNiNTB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWJ7Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjgpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiLmRpc2FibGVke2NvbG9yOmhzbGEoMCwwJSwxMDAlLC40KX0uY2FwaWJhcmEgLmNvcm5lci1mb290ZXJ7cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDtib3R0b206MDt6LWluZGV4OjM7d2lkdGg6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkqLTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2FwaWJhcmEgLmNvcm5lci1mb290ZXIgLmNvcm5lci10aXRsZXtsaW5lLWhlaWdodDozMHB4O2hlaWdodDppbmhlcml0O2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpsZWZ0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXdlaWdodDo3MDA7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSAuY29ybmVyLWZvb3RlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb3JuZXItZm9vdGVye2JhY2tncm91bmQ6IzMxM2I1MDtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhIG5hdi5yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDpjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTtoZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgLSB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkpO292ZXJmbG93LXk6c2Nyb2xsO292ZXJmbG93LXg6aGlkZGVuO3otaW5kZXg6NTtkaXNwbGF5Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJlZH0uY2FwaWJhcmEgbmF2LnJpZ2h0LC5jYXBpYmFyYSBuYXYucmlnaHQgLmNoaWxkLW5hdi1pdGVtLC5jYXBpYmFyYSBuYXYucmlnaHQgLm5hdi1pdGVte3dpZHRoOnZhcigtLW5hdi1yaWdodC13aWR0aCl9LmNhcGliYXJhIG5hdi5yaWdodCAubmF2LWlucHV0LWNvbnRhaW5lcnt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaWJhcmEgbmF2LnJpZ2h0IC5uYXYtaW5wdXQtY29udGFpbmVyIC5idXR0b24tc2VjdGlvbntwYWRkaW5nLWJvdHRvbTouNzVlbTtwYWRkaW5nLXRvcDouNzVlbTtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7Ym90dG9tOjB9LmNhcGliYXJhIG5hdi5sZWZ0e21pbi1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLWhlaWdodCkpO3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtsZWZ0OjA7d2lkdGg6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTtoZWlnaHQ6YXV0bzt6LWluZGV4OjI7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjYjBiZWM1O292ZXJmbG93OnZpc2libGU7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmNoaWxkLW5hdi1pdGVtLC5jYXBpYmFyYSBuYXYubGVmdCAubmF2LWl0ZW17d2lkdGg6dmFyKC0tbmF2LXdpZHRoKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbXttaW4td2lkdGg6MjUwcHg7bWF4LXdpZHRoOjUwMHB4O3dpZHRoOi13ZWJraXQtbWF4LWNvbnRlbnQ7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDttaW4taGVpZ2h0OjcwcHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDozcmVtO3RvcDowO2JvcmRlcjoxcHggc29saWQgZ3JleTt6LWluZGV4OjQ7Ym9yZGVyLXJhZGl1czo1cHg7cGFkZGluZzoxNnB4O3RyYW5zaXRpb246YWxsIC4zcyBlYXNlO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2JveC1zaGFkb3c6MCA2cHggNnB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCAxMHB4IDE0cHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDRweCAxOHB4IDNweCByZ2JhKDAsMCwwLC4xMik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYyguNXJlbSArIHZhcigtLWl0ZW0taGVpZ2h0KSkpfS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtLnRvLWJvdHRvbXt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gLjVyZW0pKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWRldGFpbCAuZGV0YWlsLXRpdGxle2ZvbnQtc2l6ZToxLjEyNWVtO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjhweDttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6ODBweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWRldGFpbCAuZGV0YWlsLXN1YnRpdGxle2ZvbnQtc2l6ZTouODc1O21hcmdpbi1ib3R0b206OHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItZGV0YWlsIC5oZWFkZXItY2hpcHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxNnB4O3RvcDoxNnB4O3BhZGRpbmc6MnB4IDhweDtib3JkZXI6M3B4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czo1cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmRldGFpbC1jb250YWluZXI+ZGl2e21hcmdpbjo2cHggMH0uY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3R7d2lkdGg6dmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tbmF2LXdpZHRoKTt0b3A6MDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0sLmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVte2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiMGJlYzU7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjM0cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLXRpdGxlLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS10aXRsZXtmbGV4OjEgMCBhdXRvO3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2x7ZmxleDowIDAgdmFyKC0tbmF2LWl0ZW0tY29sLXdpZHRoKTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQsLmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXR7cGFkZGluZzowfS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0Pi5ob3VyLWlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0Pi5ob3VyLWlucHV0e2ZvbnQtc2l6ZTouODc1ZW07d2lkdGg6Y2FsYygxMDAlIC0gOHB4KTtib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjI0cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQsLmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXR7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi44NzVlbTt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDoyNHB4O21hcmdpbjo4cHggNHB4IDRweDtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC4yKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDphY3RpdmUsLmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6Zm9jdXMsLmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3Vze2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjgpfS5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0e3dpZHRoOnZhcigtLWV4LW5hdi13aWR0aCk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkpO3RvcDowO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IwYmVjNTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7bGluZS1oZWlnaHQ6MS43NXJlbX0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLXRpdGxle2ZsZXg6MSAwIGF1dG87cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbHtmbGV4OjAgMCB2YXIoLS1uYXYtaXRlbS1jb2wtd2lkdGgpO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCwuY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dHtwYWRkaW5nOjB9LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXR7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi44NzVlbTt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDoyNHB4O21hcmdpbjo4cHggNHB4IDRweDtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC4yKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDphY3RpdmUsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6Zm9jdXMsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3Vze2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjgpfS5jYXBpYmFyYSBuYXYubGVmdCAuY2FwLWJ0bi1uYXYtbGlzdHtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkpO3dpZHRoOnZhcigtLWJ0bi1uYXYtd2lkdGgpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO292ZXJmbG93OmhpZGRlbn0uY2FwaWJhcmEgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3QgLmNhcC1idG4tY2hpbGQtbmF2LWl0ZW0gLmNhcC1idG4tbmF2LWl0ZW0tY29udGVudCwuY2FwaWJhcmEgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3QgLmNhcC1idG4tbmF2LWl0ZW0gLmNhcC1idG4tbmF2LWl0ZW0tY29udGVudHtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3dpZHRoOmluaGVyaXQ7cGFkZGluZzo0cHggNnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiMGJlYzU7dGV4dC1hbGlnbjpyaWdodH0uY2FwaWJhcmEgbmF2LmxlZnQgLm5hdi1pdGVtLXRvdGFsLWZvb3RlcntwYWRkaW5nLXRvcDozcHh9LmNhcGliYXJhIG5hdiAuY2FwLWJ0bi1uYXYtaXRlbS5wYXJlbnQsLmNhcGliYXJhIG5hdiAuZXgtbmF2LWl0ZW0ucGFyZW50LC5jYXBpYmFyYSBuYXYgLmluaXRpYWwtbmF2LWl0ZW0ucGFyZW50LC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWNvbnRhaW5lci5wYXJlbnR7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjEpfS5jYXBpYmFyYSBuYXYgLmNhcC1idG4tbmF2LWl0ZW0ucGFyZW50Pi5pdGVtLXRpdGxlLC5jYXBpYmFyYSBuYXYgLmV4LW5hdi1pdGVtLnBhcmVudD4uaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2IC5pbml0aWFsLW5hdi1pdGVtLnBhcmVudD4uaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1jb250YWluZXIucGFyZW50Pi5pdGVtLXRpdGxle21heC13aWR0aDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkgLSA2MHB4KTt3aWR0aDphdXRvfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVte21pbi1oZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiMGJlYzU7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KX0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29ue3RyYW5zaXRpb246YWxsIC41cyBlYXNlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7d2lkdGg6MzRweDtmbGV4OjAgMCAzNHB4O2ZvbnQtc2l6ZToxLjVlbTt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb246Zm9jdXMsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uOmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoMCwwLDAsLjMpfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbntmbGV4OjAgMCAzNHB4O2ZvbnQtc2l6ZToxLjEyNWVtO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDo0MHB4O21hcmdpbi10b3A6MTJweH0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29uIHBhdGgsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbiBwYXRoe3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHh9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxle2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6MzRweDtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5mdWxsLXdpZHRoLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuZnVsbC13aWR0aHtmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDt6LWluZGV4OjI7bWluLXdpZHRoOmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSAtIDQwcHgpO3dpZHRoOmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSAtIDQwcHgpfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuY2xpY2tlYWJsZSwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrZWFibGV7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5jbGlja2VhYmxlOmhvdmVyLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuY2xpY2tlYWJsZTpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuMikhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5ob3ZlcmFibGU6aG92ZXIsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5ob3ZlcmFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5pdGVtLXRpdGxlLWNvbnRlbnQsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuaXRlbS10aXRsZS1jb250ZW50e2ZsZXg6MSAxIGF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NTlweCl7LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5jbGljay1sYWJlbC10by1kZXRhaWwgLml0ZW0tdGl0bGUtY29udGVudCwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrLWxhYmVsLXRvLWRldGFpbCAuaXRlbS10aXRsZS1jb250ZW50e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50fX0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLWNvbnRhaW5lciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLWNvbnRhaW5lcntmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87dGV4dC1hbGlnbjpyaWdodH0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG57bWFyZ2luLWxlZnQ6MnJlbTtoZWlnaHQ6MjRweDtsaW5lLWhlaWdodDoxcmVtO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjFweCBzb2xpZDtjb2xvcjpjdXJyZW50Q29sb3I7Zm9udC1zaXplOi44NzVlbTtwYWRkaW5nOjRweCA4cHg7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMH0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuOmhvdmVyLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG46aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLmRldGFpbC1idG4taWNvbiwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLmRldGFpbC1idG4taWNvbnttYXJnaW4tbGVmdDouNXJlbTtwYWRkaW5nOjJweCA2cHg7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLmRldGFpbC1idG4taWNvbiAuY2xvc2UtaWNvbiwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLmRldGFpbC1idG4taWNvbiAuaW5mby1vdXRsaW5lLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb24gLmNsb3NlLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb24gLmluZm8tb3V0bGluZS1pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXh9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb24gLmNsb3NlLWljb24gc3ZnLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG4uZGV0YWlsLWJ0bi1pY29uIC5pbmZvLW91dGxpbmUtaWNvbiBzdmcsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb24gLmNsb3NlLWljb24gc3ZnLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG4uZGV0YWlsLWJ0bi1pY29uIC5pbmZvLW91dGxpbmUtaWNvbiBzdmd7d2lkdGg6MThweDtoZWlnaHQ6MThweH0uY2FwaWJhcmEuZm9yY2UtbW9iaWxlIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5jbGljay1sYWJlbC10by1kZXRhaWwgLml0ZW0tdGl0bGUtY29udGVudHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSBuYXYgLm11bHRpYnV0dG9ucy1idG57YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxLjVlbTtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MzhweDttYXgtaGVpZ2h0OjM4cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2FwaWJhcmEgbmF2IC5tdWx0aWJ1dHRvbnMtYnRuOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC4yKX0uY2FwaWJhcmEuZXh0ZW5kZWQtcmlnaHQgbmF2LnJpZ2h0e2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCBuYXYubGVmdHttaW4taGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgbmF2LnJpZ2h0e3RvcDpjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSAtIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSAtIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpKX0uY2FwaWJhcmEgbmF2LmxlZnQsLmNhcGliYXJhIG5hdi5yaWdodCwuY2FwaWJhcmEgbmF2LnJpZ2h0IC5idXR0b24tc2VjdGlvbntiYWNrZ3JvdW5kOiNmYWZhZmF9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW17Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjIpO2JhY2tncm91bmQ6I2ZmZn0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAucmVkLWxpZ2h0e2JvcmRlci1jb2xvcjojZjg0NzQ3fS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC55ZWxsb3ctbGlnaHR7Ym9yZGVyLWNvbG9yOiNmZGQ4MzV9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLmdyZWVuLWxpZ2h0e2JvcmRlci1jb2xvcjojMzg5OTNkfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbiwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb257Y29sb3I6IzM3NDc0Zn0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb257Y29sb3I6cmdiYSg1NSw3MSw3OSwuMil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LnJpZ2h0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5yaWdodCAuYnV0dG9uLXNlY3Rpb257YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0e2JhY2tncm91bmQ6IzIyMjgzNztib3JkZXItY29sb3I6cmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW17Ym9yZGVyLWNvbG9yOiM0MDRlNjk7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwe2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAucmVkLWxpZ2h0e2JvcmRlci1jb2xvcjojYWExYTFhfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLnllbGxvdy1saWdodHtib3JkZXItY29sb3I6I2ZiY2QwMH0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC5ncmVlbi1saWdodHtib3JkZXItY29sb3I6IzM4OGUzY30uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbXtib3JkZXItY29sb3I6cmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXR7YmFja2dyb3VuZDojNDA0ZTY5O2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC4yKX0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuY2FwLWJ0bi1uYXYtbGlzdCAuY2FwLWJ0bi1jaGlsZC1uYXYtaXRlbSAuY2FwLWJ0bi1uYXYtaXRlbS1jb250ZW50LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lcntib3JkZXItY29sb3I6cmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29ue2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29uLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbntjb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjIpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlcntoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7d2lkdGg6LXdlYmtpdC1maXQtY29udGVudDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50O3RvcDowO21pbi13aWR0aDoxMDAlO3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTt6LWluZGV4OjM7Ym9yZGVyLWJvdHRvbToycHggc29saWQgZ3JleTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWR7aGVpZ2h0OmF1dG87cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3R7cGFkZGluZzoxcHggMDtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0Om5vdCgucGVyc2lzdGVudCl7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdD5kaXZ7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3Q+ZGl2PnNwYW57ZGlzcGxheTpibG9jazt3aWR0aDppbmhlcml0O2xpbmUtaGVpZ2h0OnZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpO2hlaWdodDp2YXIoLS1oZWFkZXItaW5wdXQtaGVpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6Ljg3NWVtfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0e3dpZHRoOmluaGVyaXQ7aGVpZ2h0OnZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC41KTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6Ljg3NWVtfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7aGVpZ2h0OnZhcigtLWhlYWRlci1sYWJlbHMtaGVpZ2h0KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXIgLmhlYWRlci1pdGVte3BhZGRpbmc6NnB4IDhweDttaW4td2lkdGg6dmFyKC0taXRlbS1taW4td2lkdGgpO2hlaWdodDp2YXIoLS1oZWFkZXItaGVpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lciAuaGVhZGVyLWl0ZW0gc3Bhbi5ib3R0b20tdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjhweDt3aWR0aDoxMDAlfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOi13ZWJraXQtbWF4LWNvbnRlbnQ7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAuYWdub3twb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDozMnB4O2ZvbnQtc2l6ZTouNzVlbTttYXJnaW4tdG9wOjRweH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzZXN7ZGlzcGxheTpibG9jaztkaXNwbGF5OmZsZXh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDp2YXIoLS1kYXktd2lkdGgpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTtwYWRkaW5nLWxlZnQ6LjVlbTtwYWRkaW5nLXJpZ2h0OjJlbTtmb250LXNpemU6Ljg3NWVtO21hcmdpbi10b3A6NnB4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2Vke3dpZHRoOnZhcigtLWRheS13aWR0aCk7bWF4LXdpZHRoOnZhcigtLWRheS13aWR0aCk7b3ZlcmZsb3c6aGlkZGVufS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkLm1lcy1yZWR1Y2VkLTJ7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjIpO21heC13aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqMil9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQubWVzLXJlZHVjZWQtM3t3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqMyk7bWF4LXdpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSozKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZC5tZXMtcmVkdWNlZC00e3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSo0KTttYXgtd2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjQpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkIC5tZXMtbGFiZWx7d2lkdGg6LXdlYmtpdC1tYXgtY29udGVudDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQscmVkKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO2hlaWdodDoxMDAlO3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKS8yKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXN7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6NXB4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW97d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taGVhZGVyLWRheS1oZWlnaHQpO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtmb250LXNpemU6Ljg3NWVtO2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NHB4IDZweDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmlzLWNsaWNrZWFibGV7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5oYXMtYWxlcnQ6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7cmlnaHQ6MDt0b3A6MDtib3JkZXItY29sb3I6cmVkIHJlZCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjZweDt6LWluZGV4OjF9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29udGFpbmVyLXRsIGhlYWRlcntoZWlnaHQ6Y2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpKX0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0Om5vdCgucGVyc2lzdGVudCl7ZGlzcGxheTpmbGV4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNmMWZmZmU7Y29sb3I6IzM3NDc0Zn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZjFmZmZlKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLndlZWtlbmR7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xKTtjb2xvcjojMjYzMjM4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8udG9kYXl7YmFja2dyb3VuZDpyZ2JhKDIyOSw1Nyw1MywuOSk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmFjdGl2ZXtiYWNrZ3JvdW5kOmdyZWVuO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5pcy1jbGlja2VhYmxlOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC40KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmlzLWNsaWNrZWFibGU6YWN0aXZle2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC42KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dCwuY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgZGl2PnNwYW57Y29sb3I6IzMxM2I1MH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiMzMTNiNTA7Y29sb3I6I2YwZjBmMDtib3JkZXItY29sb3I6cmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsIzMxM2I1MCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlve2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLndlZWtlbmR7YmFja2dyb3VuZDojMjIyODM3O2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLnRvZGF5e2JhY2tncm91bmQ6cmdiYSgxODMsMjgsMjgsLjYpO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoNTYsMTQyLDYwLC42KTtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5pcy1jbGlja2VhYmxlOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC40KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaXMtY2xpY2tlYWJsZTphY3RpdmV7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IGRpdj5zcGFue2NvbG9yOmhzbGEoMCwwJSwxMDAlLC44KSFpbXBvcnRhbnR9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dHtiYWNrZ3JvdW5kOnJnYmEoNjQsNzgsMTA1LC42KTtjb2xvcjpoc2xhKDAsMCUsMTAwJSwuOCkhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMzEzYjUwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtdmVydGljYWwtY29udGFpbmVye2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC5wbG90LXZlcnRpY2FsLWNvbnRhaW5lciAucGxvdC12ZXJ0aWNhbHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMpO3dpZHRoOnZhcigtLWRheS13aWR0aCk7aGVpZ2h0OmNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSAtIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC5wbG90LXZlcnRpY2FsLWNvbnRhaW5lciAucGxvdC12ZXJ0aWNhbC5yYWlue2JhY2tncm91bmQ6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg1M2RlZyxyZ2JhKDMsMTU1LDIyOSwuMikscmdiYSgzLDE1NSwyMjksLjIpIDVweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50IDEycHgpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC5wbG90LWhvcml6b250YWwtY29udGFpbmVye2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC5wbG90LWhvcml6b250YWwtY29udGFpbmVyIC5wbG90LWhvcml6b250YWx7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zKTt3aWR0aDoxMDB2dztoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAucGxvdC1ob3Jpem9udGFsLWNvbnRhaW5lciAucGxvdC1ob3Jpem9udGFsLnBsb3QtcGFyZW50e2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4xKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bC5leHRlbmRlZC1yaWdodCAuY29udGFpbmVyLXRsIC5wbG90LWNvbnRhaW5lciAucGxvdC12ZXJ0aWNhbHtoZWlnaHQ6Y2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGZvb3Rlcnt3aWR0aDotd2Via2l0LWZpdC1jb250ZW50O3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnQ7Ym90dG9tOjA7bWluLXdpZHRoOjEwMCU7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7ei1pbmRleDoyO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBmb290ZXIgLmZvb3Rlci1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBmb290ZXIgLmZvb3Rlci1jb250YWluZXIgLmZvb3Rlci1pdGVte3BhZGRpbmc6MTBweCAycHg7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtjdXJzb3I6ZGVmYXVsdDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC5jb250YWluZXItdGwgZm9vdGVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsLmRhcmstdGhlbWUgZm9vdGVye2JhY2tncm91bmQ6IzMxM2I1MDtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5oYXMtbW9iaWxlLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXBpYmFyYS5oYXMtbW9iaWxlLWZvb3RlciAuY29udGFpbmVyLXRse2ZsZXg6MTttaW4taGVpZ2h0OjA7bWFyZ2luLWJvdHRvbTp2YXIoLS1tb2JpbGUtZm9vdGVyLWhlaWdodCl9LmNhcGliYXJhIC5tb2JpbGUtZm9vdGVye3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowO3otaW5kZXg6Mjt3aWR0aDoxMDAlO2ZsZXgtc2hyaW5rOjA7aGVpZ2h0OnZhcigtLW1vYmlsZS1mb290ZXItaGVpZ2h0KTttaW4taGVpZ2h0OnZhcigtLW1vYmlsZS1mb290ZXItaGVpZ2h0KTtwYWRkaW5nOi41ZW0gMWVtO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOi41ZW07Ym94LXNpemluZzpib3JkZXItYm94fS5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1jb250ZW50e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOi41ZW07ZmxleDoxfS5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1idXR0b25ze2Rpc3BsYXk6ZmxleDtnYXA6LjVlbTthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWxlZnQ6YXV0b30uY2FwaWJhcmEgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItc2VsZWN0LXRvZ2dsZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6LjVlbTt3aWR0aDphdXRvO21pbi13aWR0aDphdXRvO3BhZGRpbmc6NHB4IDhweDtib3JkZXItcmFkaXVzOjRweDttYXJnaW4tcmlnaHQ6MDtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC4zNSk7Ym9yZGVyOm5vbmV9LmNhcGliYXJhIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLXNlbGVjdC10b2dnbGUgLm1vYmlsZS1mb290ZXItc2VsZWN0LWNvdW50LC5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xlIC5tb2JpbGUtZm9vdGVyLXNlbGVjdC1sYWJlbHtmb250LXNpemU6Ljg3NWVtO3doaXRlLXNwYWNlOm5vd3JhcH0uY2FwaWJhcmEgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItYnRuLC5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1jYW5jZWx7ZmxleC1zaHJpbms6MDtib3JkZXI6bm9uZX0uY2FwaWJhcmEgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItYnRuLWhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAubW9iaWxlLWZvb3RlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6I2ZmZjtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9LmNhcGliYXJhIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLXNlbGVjdC10b2dnbGV7YmFja2dyb3VuZDojMWU3OWQzIWltcG9ydGFudDtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLXNlbGVjdC10b2dnbGUgc3Zne2ZpbGw6I2ZmZn0uY2FwaWJhcmEuZGFyay10aGVtZSAubW9iaWxlLWZvb3RlcntiYWNrZ3JvdW5kOiMzMTNiNTA7Y29sb3I6I2YwZjBmMDtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItc2VsZWN0LXRvZ2dsZXtiYWNrZ3JvdW5kOiMxZTc5ZDMhaW1wb3J0YW50O2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLWJ0biwuY2FwaWJhcmEuZGFyay10aGVtZSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1jYW5jZWx7Ym9yZGVyOm5vbmU7Y29sb3I6I2ZmZn0uY2FwaWJhcmEuZGFyay10aGVtZSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1idG4gc3ZnLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLWNhbmNlbCBzdmd7ZmlsbDojZmZmfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLXNlbGVjdC10b2dnbGV7YmFja2dyb3VuZDojMzg4ZTNjIWltcG9ydGFudDtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7Y29sb3I6I2ZmZn0uY2FwaWJhcmEuZGFyay10aGVtZSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xlIHN2Z3tmaWxsOiNmZmZ9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTt0b3A6dmFyKC0taGVhZGVyLWhlaWdodCk7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbmF2LXdpZHRoKSAtIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSAtIHZhcigtLWV4LW5hdi13aWR0aCkgLSB2YXIoLS1idG4tbmF2LXdpZHRoKSk7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpKTttYXJnaW4tdG9wOi0xcHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kYXktbW91c2Utb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO2JvcmRlcjozcHggc29saWQgcmdiYSgyNDUsMTI0LDAsLjUpO2JveC1zaGFkb3c6MCAwIDJweCAjZjU3YzAwLGluc2V0IDAgMCAzcHggI2Y1N2MwMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZTtvdmVyZmxvdzp2aXNpYmxlO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmFmdGVyLC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZGF5LW1vdXNlLW92ZXI6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmFmdGVye3dpZHRoOnZhcigtLWRheS13aWR0aCk7aGVpZ2h0OjEwMHZoO3JpZ2h0Oi00cHg7Ym90dG9tOmNhbGModmFyKC0taXRlbS1oZWlnaHQpIC0gMnB4KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmJlZm9yZXtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3dpZHRoOjEwMHZ3O3JpZ2h0OmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDJweCk7Ym90dG9tOi00cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5iYWNrZ3JvdW5kLWdyaWR7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjIwKTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkqMjApO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MXB4O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tZGF5LXdpZHRoKSB2YXIoLS1pdGVtLWhlaWdodCksY2FsYyh2YXIoLS1kYXktd2lkdGgpKjcpIHZhcigtLWl0ZW0taGVpZ2h0KSxjYWxjKHZhcigtLWRheS13aWR0aCkqNykgdmFyKC0taXRlbS1oZWlnaHQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoODAsODAsODAsLjMpIDFweCx0cmFuc3BhcmVudCAwKSxsaW5lYXItZ3JhZGllbnQoMGRlZyxyZ2JhKDgwLDgwLDgwLC4zKSAxcHgsdHJhbnNwYXJlbnQgMCksbGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50IGNhbGModmFyKC0tZGF5LXdpZHRoKSo1KSxyZ2JhKDgwLDgwLDgwLC4xKSAwKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCwwIDAsMCAwfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZHJhdy1ib3h7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kcmF3LWJveCBjYW52YXN7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvbnRhaW5lci10bCAudGFibGV7dG9wOmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhIC5zZWxlY3QtY29udGFpbmVye292ZXJmbG93OnZpc2libGU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjA7aGVpZ2h0OjB9LmNhcGliYXJhIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6aHNsYSgwLDAlLDc0LjElLC40KTtib3gtc2hhZG93Omluc2V0IDAgMCA1cHggaHNsYSgwLDAlLDc0LjElLC44KX0uY2FwaWJhcmEgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheVtjYXAtYmFkZ2VdOmFmdGVye2NvbnRlbnQ6YXR0cihjYXAtYmFkZ2UpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTNweDt0b3A6LTNweDtiYWNrZ3JvdW5kOiMxNTY1YzA7Zm9udC1zaXplOi43NWVtO2NvbG9yOiNmZmY7d2lkdGg6MS41ZW07aGVpZ2h0OjEuNWVtO2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6Mjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDA7cGFkZGluZzoycHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5e21pbi1oZWlnaHQ6NTBweDt3aWR0aDotd2Via2l0LWZpdC1jb250ZW50O3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnQ7Ym9yZGVyOjFweCBzb2xpZCBncmV5O3BhZGRpbmc6Ljc1ZW07ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO21hcmdpbjowIDAgMCAxZW07Ym94LXNpemluZzpib3JkZXItYm94O2JveC1zaGFkb3c6MCA2cHggNnB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCAxMHB4IDE0cHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDRweCAxOHB4IDNweCByZ2JhKDAsMCwwLC4xMik7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1cHg7dHJhbnNpdGlvbjphbGwgLjNzIGVhc2U7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLGxlZnQsdG9wO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0taXRlbS1oZWlnaHQpLzIqLTEpKTt6LWluZGV4OjQ7b3BhY2l0eToxfS5jYXBpYmFyYSAuZGV0YWlsLWRheTphZnRlcntjb250ZW50OlxcXCJcXFwiO2JhY2tncm91bmQ6aW5oZXJpdDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTFweDt0b3A6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvMiArIDdweCk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7Ym9yZGVyLWNvbG9yOmdyZXk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDAgMXB4IDFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuZGQtaGlkZXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1yaWdodC1hcnJvd3ttYXJnaW46MCAxNnB4IDAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC0xMDAlIC0gMjBweCAtIHZhcigtLWRheS13aWR0aCkpKSB0cmFuc2xhdGVZKGNhbGModmFyKC0taXRlbS1oZWlnaHQpLzIqLTEpKX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLXJpZ2h0LWFycm93OmFmdGVye2JvcmRlci13aWR0aDoxcHggMXB4IDAgMDtsZWZ0OnVuc2V0O3JpZ2h0Oi0xMXB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtY2VpbC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgtN3B4KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWNlaWwtYXJyb3c6YWZ0ZXJ7dG9wOjZweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWNlaWwtYXJyb3cuaGFzLXJpZ2h0LWFycm93e3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTEwMCUgLSAyMHB4IC0gdmFyKC0tZGF5LXdpZHRoKSkpIHRyYW5zbGF0ZVkoLTdweCl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1jZWlsLWFycm93Lmhhcy1yaWdodC1hcnJvdzphZnRlcntsZWZ0OnVuc2V0O3JpZ2h0Oi0xMXB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtbWlkZGxlLWFycm93e3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoLTUwJSArIHZhcigtLWl0ZW0taGVpZ2h0KS8yKSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1taWRkbGUtYXJyb3c6YWZ0ZXJ7dG9wOmNhbGMoNTAlIC0gMTBweCl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1taWRkbGUtYXJyb3cuaGFzLXJpZ2h0LWFycm93e3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTEwMCUgLSAyMHB4IC0gdmFyKC0tZGF5LXdpZHRoKSkpIHRyYW5zbGF0ZVkoY2FsYygtNTAlICsgdmFyKC0taXRlbS1oZWlnaHQpLzIpKX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLW1pZGRsZS1hcnJvdy5oYXMtcmlnaHQtYXJyb3c6YWZ0ZXJ7bGVmdDp1bnNldDtyaWdodDotMTFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWJvdHRvbS1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKC0xMDAlICsgdmFyKC0taXRlbS1oZWlnaHQpKSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1ib3R0b20tYXJyb3c6YWZ0ZXJ7dG9wOnVuc2V0O2JvdHRvbTo0cHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1ib3R0b20tYXJyb3cuaGFzLXJpZ2h0LWFycm93e3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTEwMCUgLSAyMHB4IC0gdmFyKC0tZGF5LXdpZHRoKSkpIHRyYW5zbGF0ZVkoY2FsYygtMTAwJSArIHZhcigtLWl0ZW0taGVpZ2h0KSkpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtYm90dG9tLWFycm93Lmhhcy1yaWdodC1hcnJvdzphZnRlcntsZWZ0OnVuc2V0O3JpZ2h0Oi0xMXB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuaGVhZGVyLWRldGFpbCAudGl0bGV7Zm9udC1zaXplOjEuMjVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTouMjVlbTttaW4td2lkdGg6MTBlbTttYXgtd2lkdGg6MjBlbTtsaW5lLWhlaWdodDp1bnNldH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmhlYWRlci1kZXRhaWwgLnN1YnRpdGxle2ZvbnQtc2l6ZTouODc1ZW07bWFyZ2luLWJvdHRvbTo4cHg7bWluLXdpZHRoOjEwZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbHttYXJnaW46MDtmbGV4OjEgMSBhdXRvfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWx7bWFyZ2luOjA7Zm9udC1zaXplOi44NzVlbTtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi41ZW0gLjVlbSAuNWVtIDFlbTtib3JkZXItcmFkaXVzOjA7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjp1bnNldDtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbnt3aWR0aDo4cHg7aGVpZ2h0OjhweDttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudDtsZWZ0OjFweDt0b3A6MTBweDtib3JkZXItcmFkaXVzOjUwJX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24uZGlhbW9uZHtib3JkZXItcmFkaXVzOjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2tldygxMGRlZywxMGRlZyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAubGVmdC1pY29uLm91dGxpbmVke2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAubGVmdC1pY29uLnRyaWFuZ2xle2JvcmRlci1yYWRpdXM6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBza2V3KDEwZGVnLDEwZGVnKSB0cmFuc2xhdGUoM3B4LDNweCk7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItd2lkdGg6NXB4O2JvcmRlci1zdHlsZTpzb2xpZDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi5zaGllbGR7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjAgMCA1MCUgNTAlfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLm5hbWV7ZmxleDowIDEgNDAlO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1yaWdodDoxZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RhcnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzY3tkaXNwbGF5OmZsZXg7bWFyZ2luLWJvdHRvbTozcHg7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYy5kZXNjLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RhcnQ7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO21hcmdpbi1ib3R0b206MDtwYWRkaW5nLWJvdHRvbTowfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MuZGVzYy1jb2x1bW46bGFzdC1jaGlsZHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYy5kZXNjLWNvbHVtbiAubGFiZWx7bWFyZ2luLXJpZ2h0OjB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAubGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleDoxIDEgNjUlO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tcmlnaHQ6LjVlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIC52YWx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO21hcmdpbi1sZWZ0OjFlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIC5wcmVmaXgsLmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAuc3VmZml4e2ZvbnQtc2l6ZTouODVlbTtmbGV4OjAgMCBhdXRvfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MgLnZhbHVlOm5vdChlbXB0eSl7bWFyZ2luLXJpZ2h0Oi4yZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyBzdXB7dG9wOi0xZW0haW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uLWZsZXh7bWF4LWhlaWdodDo2MHZoOy1tb3otY29sdW1uLWNvdW50OjI7Y29sdW1uLWNvdW50OjI7LW1vei1jb2x1bW4tZ2FwOjIwcHg7Y29sdW1uLWdhcDoyMHB4Oy1tb3otY29sdW1uLWZpbGw6YmFsYW5jZTtjb2x1bW4tZmlsbDpiYWxhbmNlfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uLWZsZXguc2luZ2xlLWl0ZW17LW1vei1jb2x1bW4tY291bnQ6MTtjb2x1bW4tY291bnQ6MX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmZsZXh7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWZsb3c6d3JhcDstbXMtd3JpdGluZy1tb2RlOnRiLWxyO3dyaXRpbmctbW9kZTp2ZXJ0aWNhbC1scjttYXgtaGVpZ2h0OjI1JX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmZsZXggLml0ZW0tZGV0YWlse2ZsZXg6MCAwIGF1dG87bWluLXdpZHRoOjhlbTstbXMtd3JpdGluZy1tb2RlOmxyLXRiO3dyaXRpbmctbW9kZTpob3Jpem9udGFsLXRifS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uey1tb3otY29sdW1uczo3ZW0gMztjb2x1bW5zOjdlbSAzO21pbi13aWR0aDozMGVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uIC5pdGVtLWRldGFpbHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlse21hcmdpbjo0cHg7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouNWVtIDFlbTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVufS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5uYW1le2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOi41ZW07Y29sb3I6dmFyKC0tbG9jYWwtY29sb3ItZm9udCxpbmhlcml0KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAubGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb257bWluLWhlaWdodDoxMHB4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbCAubGVmdC1pY29uLnRyaWFuZ2xle2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24uc2hpZWxke2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsZ3JleSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWx7cGFkZGluZzouNWVtIDAgLjI1ZW07ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5uYW1le2ZsZXg6MSAwIDEwMCU7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5lbGVtZW50cy1saXN0e21hcmdpbjo0cHggLTRweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmVsZW1lbnRzLWRldGFpbCAuZWxlbWVudHMtbGlzdCAuZWxlbWVudC1kZXRhaWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzouMjVlbSAuODc1ZW07Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2ZmZjttYXJnaW46LjI1ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydHtwYWRkaW5nOi41ZW0gMCAuMjVlbSAyZW07cG9zaXRpb246cmVsYXRpdmU7bWluLXdpZHRoOjE1ZW07bWluLXdpZHRoOjEwZW07bWF4LXdpZHRoOjMwZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydCAuYWxlcnQtaWNvbnttYXgtd2lkdGg6MmVtO2ZvbnQtc2l6ZToxLjc1ZW07cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDouNWVtO2NvbG9yOmdyZXl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydCAucmVke2NvbG9yOiNmNDQzMzZ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVye21hcmdpbjowIC0uNzhlbSAtLjc1ZW07Ym9yZGVyOjFweCBzb2xpZCBncmV5O3otaW5kZXg6Mn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgcHJle3doaXRlLXNwYWNlOnByZS13cmFwO3doaXRlLXNwYWNlOi1tb3otcHJlLXdyYXA7d2hpdGUtc3BhY2U6LXByZS13cmFwO3doaXRlLXNwYWNlOi1vLXByZS13cmFwO3dvcmQtd3JhcDpicmVhay13b3JkfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqe21pbi13aWR0aDoxMGVtO21heC13aWR0aDozMGVtO21hcmdpbjowIDAgLjVlbTtwYWRkaW5nOi43NWVtO2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzouMjVlbSAuNWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqLWRldGFpbCAuZW1haWx7Zm9udC1zaXplOi44NzVlbTtmb250LXN0eWxlOml0YWxpYztvcGFjaXR5Oi41fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqLWRldGFpbCAuZGF0ZXtmb250LXNpemU6LjcyNWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheXtjb2xvcjojMzc0NzRmO2JhY2tncm91bmQ6I2ZmZn0uY2FwaWJhcmEgLmRldGFpbC1kYXksLmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCwuY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5kZXNjLWNvbHVtbiwuY2FwaWJhcmEgLmRldGFpbC1kYXk6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjIpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5lbGVtZW50cy1saXN0IC5lbGVtZW50LWRldGFpbHtiYWNrZ3JvdW5kOnJnYmEoNTUsNzEsNzksLjgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmVjYjM7Ym9yZGVyLWNvbG9yOiNmZmNhMjh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlse2JhY2tncm91bmQ6I2ZmZTA4Mjtib3JkZXItY29sb3I6I2ZmY2EyOH0uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheXtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjojNDA0ZTY5O2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheTphZnRlcntib3JkZXItY29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlse2JhY2tncm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCwuY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmRlc2MtY29sdW1ue2JvcmRlci1jb2xvcjojNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWwgLmVsZW1lbnRzLWxpc3QgLmVsZW1lbnQtZGV0YWlse2JhY2tncm91bmQ6IzI5MzI0M30uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiMyOTMyNDM7Ym9yZGVyLWNvbG9yOnJnYmEoMjUxLDE5Miw0NSwuNCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgLm1zai1kZXRhaWx7YmFja2dyb3VuZDpyZ2JhKDI1MSwxOTIsNDUsLjEpfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3otaW5kZXg6MTA7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLGxlZnQsdG9wfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIuY20taGlkZSAuY2FwLWNvbnRleHQtbWVudXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudXtwb3NpdGlvbjphYnNvbHV0ZTttaW4td2lkdGg6MjUwcHg7ei1pbmRleDoyO2JvcmRlci1yYWRpdXM6NXB4O2JvcmRlcjoxcHggc29saWQgZ3JleTtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKTtmb250LXNpemU6Ljc1ZW07dHJhbnNpdGlvbjphbGwgLjFzIGxpbmVhcjt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO3BhZGRpbmc6LjRlbSAwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2FwaWJhcmEgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51X2l0ZW17cGFkZGluZzouNWVtIDFlbTtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjAsLjIpfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbS5pcy1kaXNhYmxlZHtvcGFjaXR5Oi41O2N1cnNvcjp1bnNldH0uY2FwaWJhcmEgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51X2l0ZW0uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDpub25lfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbS5pcy1kaXZpZGVye2N1cnNvcjp1bnNldDtoZWlnaHQ6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDIwLDIwLDIwLC4yKTtwYWRkaW5nOjA7bWFyZ2luOi4zZW0gMWVtfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbV9pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAwIGF1dG87cGFkZGluZy1yaWdodDouNWVtfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbV9pY29uIHN2Z3t3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnV7Y29sb3I6IzM3NDc0Zjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMik7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnUgc3ZnIHBhdGh7ZmlsbDojMzc0NzRmfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudXtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjojNDA0ZTY5O2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnUgc3ZnIHBhdGh7ZmlsbDojZjBmMGYwfS5jYXBpYmFyYSAuaG91ci1pbnB1dHtib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czozcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4O21hcmdpbjo4cHggNHB4O292ZXJmbG93OmhpZGRlbn0uY2FwaWJhcmEgLmhvdXItaW5wdXQgaW5wdXR7d2lkdGg6NTAlO2hlaWdodDppbmhlcml0O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtmb250LXNpemU6Ljg3NWVtfS5jYXBpYmFyYSAuaG91ci1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC5ob3VyLWlucHV0IGlucHV0OmZvY3Vze2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMSl9LmNhcGliYXJhIC5ob3VyLWlucHV0IHNwYW57d2lkdGg6OHB4O3RleHQtYWxpZ246Y2VudGVyfS5jYXBpYmFyYSAuaG91ci1pbnB1dCAuaGh7dGV4dC1hbGlnbjpyaWdodH0uY2FwaWJhcmEgLnRpbWV7Ym9yZGVyLXJhZGl1czo2cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjB9LmNhcGliYXJhIC50aW1lIC5zeW1ib2x7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OmF1dG87d2lkdGg6MjBweDtmb250LXNpemU6MnJlbTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC50aW1lIGlucHV0e2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7d2lkdGg6NjJweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtwYWRkaW5nOjZweH0uY2FwaWJhcmEgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAudGltZSBpbnB1dDpmb2N1c3t0cmFuc2Zvcm06c2NhbGUoMS4wNil9LmNhcGliYXJhIC50aW1lIGlucHV0OmludmFsaWR7Ym9yZGVyOjJweCBzb2xpZCByZWR9LmNhcGliYXJhIC5idXR0b25zLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNhcGliYXJhIC5idXR0b25zLWdyb3VwIGJ1dHRvbi5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLXJhZGl1czowO21hcmdpbjowIC0ycHggMCAwfS5jYXBpYmFyYSAuYnV0dG9ucy1ncm91cCBidXR0b24uY2FwLWJ0bi1vdXRsaW5lOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJhZGl1czo2cHggMCAwIDZweDttYXJnaW4tbGVmdDo0cHh9LmNhcGliYXJhIC5idXR0b25zLWdyb3VwIGJ1dHRvbi5jYXAtYnRuLW91dGxpbmU6bGFzdC1vZi10eXBle2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDA7bWFyZ2luLXJpZ2h0OjRweH0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVye2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2ZsZXgtd3JhcDpub3dyYXA7Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXI6c29saWQgZ3JleTtib3JkZXItd2lkdGg6MnB4IDJweCAwfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIgLmlucHV0LWJveC10YWJ7ZmxleDoxIDEgYXV0bztwYWRkaW5nOi4zZW0gMWVtO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1yaWdodDoxcHggc29saWQgZ3JleTtjdXJzb3I6cG9pbnRlcn0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVyIC5pbnB1dC1ib3gtdGFiLmFjdGl2ZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSw1OC44JSwuMyl9LmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciAuaW5wdXQtYm94LXRhYjpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIrLmlucHV0LWJveHtib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4fS5jYXBpYmFyYSAuaW5wdXQtYm94e21hcmdpbjowIDE2cHg7bWluLWhlaWdodDoxODBweDtib3JkZXI6MnB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czo2cHg7b3ZlcmZsb3cteTpzY3JvbGw7cGFkZGluZy1ib3R0b206NjBweDt3aWR0aDoxMDAlO21heC1oZWlnaHQ6MzAwcHh9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXJ7cGFkZGluZzouM2VtO21heC13aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGhzbGEoMCwwJSwzOS4yJSwuMyk7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXIgLnNlYXJjaC1pbnB1dHtib3JkZXI6MXB4IHNvbGlkICM2NDY0NjQ7Ym9yZGVyLXJhZGl1czoxM3B4O2hlaWdodDoyNnB4O3BhZGRpbmc6LjVlbSAxZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtmb250LXNpemU6LjhlbTtjb2xvcjppbmhlcml0fS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQ6LW1vei1wbGFjZWhvbGRlci1zaG93bisuc2VhcmNoLWlucHV0LWNsZWFye2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lciAuc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcisuc2VhcmNoLWlucHV0LWNsZWFye2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lciAuc2VhcmNoLWlucHV0OnBsYWNlaG9sZGVyLXNob3duKy5zZWFyY2gtaW5wdXQtY2xlYXJ7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQtY2xlYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MWVtO3RvcDouNGVtO2NvbG9yOmhzbGEoMCwwJSwzOS4yJSwuNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9ue3BhZGRpbmc6LjVlbSAyZW0gLjVlbSAuNWVtO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGhzbGEoMCwwJSwzOS4yJSwuMyl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5oYXMtaWNvbntwYWRkaW5nOi41ZW0gMmVtIC41ZW0gMS41ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5jbGlja2VhYmxle2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uY2xpY2tlYWJsZTpob3ZlciBsYWJlbHtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uaXMtdGl0bGV7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjEpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uaXMtdGl0bGUgLm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGV7b3BhY2l0eTouNn0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEuNWVtO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOi41ZW07bWFyZ2luOjFlbTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6M3B4O3otaW5kZXg6Mjtib3gtc2hhZG93OjAgMnB4IDVweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtmb250LXNpemU6Ljg3NWVtO2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnN0YXJ0O21heC13aWR0aDoxMDAlO2ZsZXg6MCAxIGF1dG99LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDplbmQ7ZmxleDoxIDAgYXV0bztmb250LXNpemU6MWVtO3BhZGRpbmc6MCAuNWVtfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXN1YnRpdGxlLC5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnVuc2V0O21heC13aWR0aDoxMDAlO2ZsZXgtZ3JvdzoxfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXN1YnRpdGxle2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4e2ZsZXg6MCAwIGF1dG87Zm9udC1zaXplOi44NzVlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDouNWVtO3RvcDouNzVlbTt3aWR0aDouNzVlbTtoZWlnaHQ6Ljc1ZW07Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixncmV5KTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1saW5re29wYWNpdHk6LjY7Y29sb3I6IzIxOTZmMztkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDouNWVtO3RvcDouNzVlbX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1saW5rIHN2Z3t3aWR0aDoxOHB4IWltcG9ydGFudDtoZWlnaHQ6MThweCFpbXBvcnRhbnR9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbjpob3ZlciAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dHt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo0ZW07bWFyZ2luLXJpZ2h0Oi41ZW07Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjIpO2ZvbnQtc2l6ZToxZW07ZmxleDowIDAgNGVtfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tZm9vdGVye21hcmdpbi10b3A6LjI1ZW07ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jYXBpYmFyYSBzZWxlY3QuaW5wdXQtc2VsZWN0e3BhZGRpbmc6LjNlbSAxZW07d2lkdGg6MTAwJTtmbGV4OjEgMCAxMDAlO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOmF1dG87LW1vei1hcHBlYXJhbmNlOmF1dG87YXBwZWFyYW5jZTphdXRvfS5jYXBpYmFyYSBzZWxlY3QuaW5wdXQtc2VsZWN0IG9wdGlvbntwYWRkaW5nOi4zZW07Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOmluaGVyaXR9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLWxpc3R7bWFyZ2luOjE2cHggMH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24tbGlzdCAuaW5wdXQtc2VjdGlvbi10aXRsZXttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24tbGlzdCAuaW5wdXQtc2VjdGlvbnttYXJnaW46MCAxNnB4IDhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb257bWFyZ2luOjE2cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6bm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24udG8tcmlnaHR7YWxpZ24taXRlbXM6ZW5kfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi50by1sZWZ0e2FsaWduLWl0ZW1zOnN0YXJ0fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuc21hbGwtY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7dG9wOi0xMHB4O3dpZHRoOjEuMmVtO2hlaWdodDoxLjJlbTtmb250LXNpemU6LjllbTtib3JkZXI6MXB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDJweCByZ2JhKDAsMCwwLC40KTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZmZmO2JhY2tncm91bmQ6cmVkO2JvcmRlci1yYWRpdXM6NTAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tdGl0bGV7ZmxleDoxIDEgMTAwJTt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tdGl0bGUgYnV0dG9ue21hcmdpbi1sZWZ0OmF1dG87ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tbGlua3tmbGV4OjEgMSAxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpiYXNlbGluZTtwYWRkaW5nLXRvcDouMjVlbX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tbGluayBhe2NvbG9yOiMyMTk2ZjM7bWFyZ2luLXRvcDouNzVyZW19LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLmlzLWludmFsaWQgLmlucHV0LWJveCwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24uaXMtaW52YWxpZCBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyOjJweCBzb2xpZCByZWQhaW1wb3J0YW50O2JveC1zaGFkb3c6MCAwIDNweCByZWQhaW1wb3J0YW50fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5kZW5zZSBpbnB1dC5uYXYtaW5wdXR7d2lkdGg6NTAlO2ZvbnQtc2l6ZToxZW07cGFkZGluZzozcHggNnB4fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyOjJweCBzb2xpZCBoc2xhKDAsMCUsNTAuMiUsLjcpO2JvcmRlci1yYWRpdXM6NnB4O3dpZHRoOjEwMCU7bWluLXdpZHRoOjEzMHB4O21heC13aWR0aDoxNzBweDtmb250LXNpemU6MmVtO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4IDZweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O291dGxpbmU6bm9uZTt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlcjoycHggc29saWQgZ3JleTtib3gtc2hhZG93OjAgNHB4IDZweCBoc2xhKDAsMCUsNTAuMiUsLjIpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQuc21hbGx7Zm9udC1zaXplOjEuM2VtfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGV7Ym9yZGVyOjJweCBzb2xpZCBoc2xhKDAsMCUsNTAuMiUsLjcpO2JvcmRlci1yYWRpdXM6NnB4O3dpZHRoOjcwJTttaW4td2lkdGg6MTMwcHg7cGFkZGluZzozcHggNnB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7b3V0bGluZTpub25lO3RyYW5zaXRpb246YWxsIC4xcyBlYXNlO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXN7Ym9yZGVyOjJweCBzb2xpZCBncmV5O2JveC1zaGFkb3c6MCA0cHggNnB4IGhzbGEoMCwwJSw1MC4yJSwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSBsYWJlbHtmbGV4OjEgMSBhdXRvfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUgaW5wdXRbdHlwZT1maWxlXXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5pbnB1dC1zZWN0aW9uLWNvbHt3aWR0aDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXg6MSAxIDEwJX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tY29sIGlucHV0Lm5hdi1pbnB1dHttaW4td2lkdGg6dW5zZXQ7d2lkdGg6Y2FsYygxMDAlIC0gMXJlbSk7bWF4LXdpZHRoOjdyZW19LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe291dGxpbmU6bm9uZTtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MnB4IHNvbGlkIGdyZXk7d2lkdGg6MTAwJTttaW4td2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTttaW4taGVpZ2h0OjEwMHB4O3RyYW5zaXRpb246YWxsIC4xcyBlYXNlO3BhZGRpbmc6OHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxNjAsMCwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0W3R5cGU9Y2hlY2tib3hde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jYXBpYmFyYSAudGltZXtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwxMjgsMCwuNyk7Y29sb3I6Z3JlZW59LmNhcGliYXJhIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhIC50aW1lIGlucHV0e2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOmdyZWVuO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxMjgsMCwuMil9LmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciwuY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVyIC5pbnB1dC1ib3gtdGFie2JvcmRlci1jb2xvcjpncmVlbn0uY2FwaWJhcmEgLmlucHV0LWJveHtjb2xvcjojMzc0NzRmO2JvcmRlcjoycHggc29saWQgZ3JlZW59LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOiNmYWZhZmF9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcHtiYWNrZ3JvdW5kOiNmYWZhZmE7Y29sb3I6IzM3NDc0Zjtib3JkZXI6MXB4IHNvbGlkICMzNzQ3NGZ9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Y29sb3I6IzM3NDc0Zjtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwxMjgsMCwuNyl9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlcjoycHggc29saWQgZ3JlZW47Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDEyOCwwLC4yKX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCBvcHRpb257YmFja2dyb3VuZDojZmFmYWZhO2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2NvbG9yOiMzNzQ3NGY7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMTI4LDAsLjcpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkIGdyZWVuO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxMjgsMCwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JhY2tncm91bmQ6cmdiYSgyNTUsMjQ5LDE5NiwuNik7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLC40KX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI0OSwxOTYsLjgpO2JveC1zaGFkb3c6MCA0cHggNnB4IHRyYW5zcGFyZW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC50aW1le2JvcmRlcjoycHggc29saWQgcmdiYSg2NCw3OCwxMDUsLjcpO2NvbG9yOiM0MDRlNjl9LmNhcGliYXJhLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuZGFyay10aGVtZSAudGltZSBpbnB1dHtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzQwNGU2OTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDY0LDc4LDEwNSwuMil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveC10YWItY29udGFpbmVyLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciAuaW5wdXQtYm94LXRhYntib3JkZXItY29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94e2NvbG9yOiNmMGYwZjA7Ym9yZGVyOjJweCBzb2xpZCAjNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dHtiYWNrZ3JvdW5kOiM0MDRlNjk7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe2JhY2tncm91bmQ6IzIyMjgzNztjb2xvcjojZjBmMGYwO2JvcmRlcjoxcHggc29saWQgI2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2NvbG9yOiNmMGYwZjA7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDY0LDc4LDEwNSwuNyl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkICM0MDRlNjk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2NCw3OCwxMDUsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Qgb3B0aW9ue2JhY2tncm91bmQ6IzIyMjgzNztjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Y29sb3I6I2YwZjBmMDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoNjQsNzgsMTA1LC43KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkICM0MDRlNjk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2NCw3OCwxMDUsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JhY2tncm91bmQ6cmdiYSgyNTEsMTkyLDQ1LC4xKTtib3JkZXI6MnB4IHNvbGlkICM5ZTllOWU7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1MSwxOTIsNDUsLjMpO2JveC1zaGFkb3c6MCA0cHggNnB4IGhzbGEoMCwwJSw2MiUsLjIpfS5jYXBpYmFyYSBidXR0b257b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSBidXR0b24uY2FwLXJvdGF0ZSAubWRpOmJlZm9yZSwuY2FwaWJhcmEgYnV0dG9uLmNhcC1yb3RhdGUgc3Zne3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbjpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZTpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4tcmFpc2VkOmZvY3VzLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZTpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbjpkaXNhYmxlZCwuY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZTpkaXNhYmxlZCwuY2FwaWJhcmEgLmNhcC1idG4tcmFpc2VkOmRpc2FibGVkLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZTpkaXNhYmxlZHtvcGFjaXR5Oi42fS5jYXBpYmFyYSBidXR0b24uY2FwLWJ0bi1zbXtmb250LXNpemU6Ljc1ZW07bWFyZ2luOjRweDtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmV7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6Z3JleTtib3JkZXI6MnB4IHNvbGlkIGdyZXk7cGFkZGluZzo4cHggMTZweDttYXJnaW46MCA4cHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6Z3JleX0uY2FwaWJhcmEgLmNhcC1idG4tcmFpc2Vke2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6OHB4IDE2cHg7bWFyZ2luOjAgOHB4O2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6Z3JleTtib3JkZXI6MnB4IHNvbGlkIGdyZXk7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDozMnB4O3dpZHRoOjMycHg7b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6MTZweDttYXJnaW4tdG9wOjRweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO3BhZGRpbmc6NHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOmdyZXk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jYXAtYnRuLWljb24gc3Zne2ZpbGw6Z3JleX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWhhcy1iYWRnZTphZnRlcntjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LS4yZW07dG9wOi0uMmVtO3dpZHRoOi44ZW07aGVpZ2h0Oi44ZW07YmFja2dyb3VuZDpncmV5O2JvcmRlci1yYWRpdXM6NTAlfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjpub25lfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5le2JvcmRlcjoxcHggc29saWQgZ3JleX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLXRvZ2dsZS1zaWRlYmFye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjEwcHg7ei1pbmRleDoyO21hcmdpbjowfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uIC5tZGl7Zm9udC1zaXplOjI0cHh9LmNhcGliYXJhIC5jYXAtYnRuLWljb24gLmxvYWRpbmctaWNvbntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmxvYWRpbmc+Om5vdCgubG9hZGluZy1pY29uKXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5jYXAtYnRuLWljb24ubG9hZGluZyAubG9hZGluZy1pY29ue2Rpc3BsYXk6dW5zZXR9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46NHB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7cGFkZGluZzowO2ZvbnQtc2l6ZToxNHB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZSAubWRpe2ZvbnQtc2l6ZToyNHB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZXtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoycHg7dG9wOjJweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOmdyZXk7d2lkdGg6MjJweDtoZWlnaHQ6MjJweH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUgc3Bhbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjFweDt0b3A6NnB4O3dpZHRoOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZXtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjJweDt0b3A6M3B4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoycHggc29saWQgZ3JleTt3aWR0aDoyMnB4O2hlaWdodDoyMnB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lIHNwYW57cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxcHg7dG9wOjZweDt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOmdyZXk7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3RvcDowO2JvcmRlci1yYWRpdXM6MCA1MCUgNTAlIDUwJTtiYWNrZ3JvdW5kOmdyZXk7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC0ycHgsNHB4KSByb3RhdGUoNDVkZWcpfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3Agc3Bhbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjZweDt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhLmV4dGVuZGVkLXJpZ2h0IFt0b2dnbGUtc2lkZWJhci1yaWdodF0gc3ZnLC5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgW3RvZ2dsZS1oZWFkZXJdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNhcGliYXJhIC5jYXAtYnRuLXJhaXNlZHtiYWNrZ3JvdW5kOiMwMGY7Ym9yZGVyOjJweCBzb2xpZCAjMDBmO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmV7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MnB4IHNvbGlkICMwMGY7Y29sb3I6IzAwZn0uY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOiMwMGY7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGV7Y29sb3I6IzM3NDc0Zn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcHtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZTpiZWZvcmUsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcDpiZWZvcmV7YmFja2dyb3VuZDojMzg4ZTNjfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS5pcy1lbXB0eTpiZWZvcmUsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcC5pcy1lbXB0eTpiZWZvcmV7YmFja2dyb3VuZDojNjE2MTYxfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lOmJlZm9yZXtib3JkZXItY29sb3I6IzM4OGUzY30uY2FwaWJhcmEgLmNhcC1idG4taWNvbiwuY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZSBzcGFue2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1oYXMtYmFkZ2U6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuOCl9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZHtiYWNrZ3JvdW5kOnJnYmEoODQsMTEwLDEyMiwuMSk7Ym9yZGVyLWNvbG9yOiM1NDZlN2E7Y29sb3I6IzU0NmU3YX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmFjdGl2ZXtiYWNrZ3JvdW5kOiM1NDZlN2F9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmhvdmVye2JhY2tncm91bmQ6cmdiYSg4NCwxMTAsMTIyLC4zKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjojNTQ2ZTdhO2NvbG9yOiM1NDZlN2F9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6YWN0aXZle2JhY2tncm91bmQ6cmdiYSg4NCwxMTAsMTIyLC4zKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoODQsMTEwLDEyMiwuMSl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JhY2tncm91bmQ6IzQwNGU2OTtib3JkZXI6MnB4IHNvbGlkICNmMGYwZjA7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjJweCBzb2xpZCAjZjBmMGYwO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0MDRlNjk7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3B7Y29sb3I6aHNsYSgwLDAlLDk0LjElLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZTpiZWZvcmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9wOmJlZm9yZXtiYWNrZ3JvdW5kOiMyZTdkMzJ9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUuaXMtZW1wdHk6YmVmb3JlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcC5pcy1lbXB0eTpiZWZvcmV7YmFja2dyb3VuZDojNjE2MTYxfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmU6YmVmb3Jle2JvcmRlci1jb2xvcjojMmU3ZDMyfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24sLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZSBzcGFue2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWhhcy1iYWRnZTphZnRlcntiYWNrZ3JvdW5kOnJnYmEoNTYsMTQyLDYwLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWR7YmFja2dyb3VuZDpoc2xhKDAsMCUsOTQuMSUsLjEpO2JvcmRlci1jb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpO2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSw5NC4xJSwuMyl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpO2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTphY3RpdmV7YmFja2dyb3VuZDpoc2xhKDAsMCUsOTQuMSUsLjEpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSw5NC4xJSwwKX0uY2FwaWJhcmEgW2NhcC10b29sdGlwXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2FwaWJhcmEgW2NhcC10b29sdGlwXTpob3ZlcjpiZWZvcmV7cGFkZGluZzo4cHg7b3BhY2l0eToxO2JvcmRlci13aWR0aDoxcHg7aGVpZ2h0OmF1dG99LmNhcGliYXJhIFtjYXAtdG9vbHRpcF06YmVmb3Jle29wYWNpdHk6LjM7aGVpZ2h0OjA7cGFkZGluZzowIDhweDt0ZXh0LWFsaWduOmxlZnQ7b3ZlcmZsb3c6aGlkZGVuO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6Y2FsYygxMDAlICsgMThweCk7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZXgoLTUwJSk7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC43KTtib3JkZXI6MCBzb2xpZCAjMDAwO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7Y29udGVudDphdHRyKGNhcC10b29sdGlwKTt0ZXh0LXRyYW5zZm9ybTpub25lO21pbi13aWR0aDoxMDBweDt6LWluZGV4OjV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVye292ZXJmbG93OnZpc2libGU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjA7aGVpZ2h0OjB9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyOmhvdmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXIgLmxvbmctYmFye29wYWNpdHk6LjN9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3h7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOmRlZmF1bHQ7d2lsbC1jaGFuZ2U6ZGlzcGxheX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZmxvYXQtYm94LWNvbnRlbnR7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTttYXgtd2lkdGg6dmFyKC0tZGF5LXdpZHRoKTttaW4td2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO21heC1oZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO21pbi1oZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMnMgZWFzZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6MX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZmxvYXQtYm94LWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94W2RhdGEtaXMtdmlzaWJsZT1mYWxzZV17ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3Zlcnt6LWluZGV4OjJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXIrLmZsb2F0LWJveC1leHQgLmxvbmctYmFye3otaW5kZXg6MjtvcGFjaXR5OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmljb24tbWVzc2FnZXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjI7dG9wOi0zcHg7cmlnaHQ6LTJweDt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JhY2tncm91bmQ6I2ZmZWIzYjtjb2xvcjojNGUzNDJlO2ZpbGw6IzRlMzQyZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCAjZmZlYjNifS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5pY29uLW1lc3NhZ2Ugc3Zne21hcmdpbjowO3RvcDowO3Bvc2l0aW9uOmFic29sdXRlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Lmhhcy1lcnJvcnM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo3cHg7aGVpZ2h0OjdweDtsZWZ0OjFweDt0b3A6MXB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2QzMmYyZjt6LWluZGV4OjJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3guaGFzLWVycm9ycy50cmlhbmdsZS11cDpiZWZvcmV7bGVmdDoycHg7d2lkdGg6MDtoZWlnaHQ6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUoMnB4LDJweCk7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1jb2xvcjojNjRkZDE3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM2NGRkMTc7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo0cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC5oYXMtZXJyb3JzLnRyaWFuZ2xlLWRvd246YmVmb3Jle2xlZnQ6MnB4O3dpZHRoOjA7aGVpZ2h0OjA7dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKSB0cmFuc2xhdGUoMnB4LDJweCk7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1jb2xvcjojZDMyZjJmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNkMzJmMmY7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo0cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci1ib3R0b20sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItbWlkZGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLXRvcHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7d2lkdGg6MTAwJTtvdmVyZmxvdzp2aXNpYmxlO2hlaWdodDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLXRvcHt0b3A6MXB4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLXRvcCAuZG90e2JvcmRlci1yYWRpdXM6MCAwIDUwJSA1MCV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItbWlkZGxle3RvcDpjYWxjKDUwJSAtIDRweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItYm90dG9te2JvdHRvbTo1cHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItYm90dG9tIC5kb3R7Ym9yZGVyLXJhZGl1czowIDAgNTAlIDUwJX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90e3dpZHRoOjhweDttaW4td2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luOjFweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMTAwJSwuOCkpO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDM5LjIlLC41KSl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5kaWFtb25ke2JvcmRlci1yYWRpdXM6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBza2V3KDEwZGVnLDEwZGVnKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90Lm91dGxpbmVke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC50cmlhbmdsZXt3aWR0aDowO2hlaWdodDowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNrZXcoMTBkZWcsMTBkZWcpIHRyYW5zbGF0ZSgxcHgsMXB4KTtib3JkZXItbGVmdDo1cHggc29saWQgdmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDM5LjIlLC44KSk7Ym9yZGVyLWJvdHRvbTo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wOjVweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMzkuMiUsLjgpKTtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGF7d2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTouODc1ZW07dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKTttYXJnaW4tYm90dG9tOjJweDtmb250LXdlaWdodDo3MDA7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCBoc2xhKDAsMCUsMTAwJSwuMik7Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6dmFyKC0tbG9jYWwtY29sb3ItZm9udCwjZmZmKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpvcGFjaXR5KDIwJSk7YmFja2Ryb3AtZmlsdGVyOm9wYWNpdHkoMjAlKTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKTtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjIpKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtb3V0bGluZWR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLW91dGxpbmVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO29wYWNpdHk6LjM7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigycHgpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDJweCk7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xcHg7dG9wOi0xcHg7d2lkdGg6Y2FsYygxMDAlICsgMnB4KTtoZWlnaHQ6Y2FsYygxMDAlICsgMnB4KTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6LTF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhcntoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDEuNXB4KTt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkgLSA2cHgpO2xpbmUtaGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoxcHg7bWFyZ2luOjAgM3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXI6Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjNweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLW91dGxpbmVke2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMS41cHgpO3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDZweCk7bGluZS1oZWlnaHQ6MDtjb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjFweDttYXJnaW46MCAzcHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1vdXRsaW5lZDpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6M3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItb3V0bGluZWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7b3BhY2l0eTouMzstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDJweCk7YmFja2Ryb3AtZmlsdGVyOmJsdXIoMnB4KTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTFweDt0b3A6LTFweDt3aWR0aDpjYWxjKDEwMCUgKyAycHgpO2hlaWdodDpjYWxjKDEwMCUgKyAycHgpO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1kYXNoZWR7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAxLjVweCk7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gNnB4KTtsaW5lLWhlaWdodDowO2NvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MXB4O21hcmdpbjowIDNweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLWRhc2hlZDpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6M3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItZGFzaGVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMXB4O3RvcDotMXB4O3dpZHRoOmNhbGMoMTAwJSArIDJweCk7aGVpZ2h0OmNhbGMoMTAwJSArIDJweCk7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtc2l6ZToxMHB4IDEwcHg7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpLHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpIDNweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50IDUwJSl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvd3tkaXNwbGF5OmZsZXg7bWF4LWhlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMXB4KTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDFweCk7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gMnB4KTtsaW5lLWhlaWdodDowO2NvbG9yOnRyYW5zcGFyZW50O21hcmdpbjoxcHg7Ym9yZGVyLWNvbG9yOnZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjIpKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93OmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDozcHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdzplbXB0eXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3cgLnJvd2RvdC0tZG90e3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKS80IC0gMnB4KTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDJweCk7bWFyZ2luLXJpZ2h0OjFweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjNweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMTAwJSwuOCkpO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDM5LjIlLC44KSk7Ym94LXNoYWRvdzowIDAgMXB4IDFweCByZ2JhKDAsMCwwLC4yKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93IC5yb3dkb3QtLWRvdC5zaGFwZS1vdXRsaW5lZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwzOS4yJSwuMil9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdyAucm93ZG90LS1kb3Quc2hhcGUtcm91bmRlZHtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gLjVweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdyAucm93ZG90LS1kb3Quc2hhcGUtb3V0bGluZWQtcm91bmRlZHtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dpZHRoOmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAuNXB4KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucGxvdC1mbG9hdGJveC1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6dmlzaWJsZX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucGxvdC1mbG9hdGJveC1jb250YWluZXIgLnBsb3QtZmxvYXRib3h7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5wbG90LWZsb2F0Ym94LWNvbnRhaW5lciAucGxvdC1mbG9hdGJveC5zdHJpcGV7YmFja2dyb3VuZDpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDUzZGVnLHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKSx2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSkgNXB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgMTJweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnBsb3QtZmxvYXRib3gtY29udGFpbmVyIC5wbG90LWZsb2F0Ym94LnN0cmlwZS1pbnZlcnNle2JhY2tncm91bmQ6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgxMjdkZWcsdmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpLHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKSA1cHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCAxMnB4KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmljb24tZmxvYXRib3h7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gMTZweCk7bWFyZ2luOjZweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7b3BhY2l0eTouOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmljb24tZmxvYXRib3ggc3ZnIHBhdGh7ZmlsbDp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSk7ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLDAsMCwuMikpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuaWNvbi1mbG9hdGJveDpob3ZlcntvcGFjaXR5OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0e3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OnZpc2libGU7Y3Vyc29yOmRlZmF1bHQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlO3dpbGwtY2hhbmdlOmRpc3BsYXk7cG9pbnRlci1ldmVudHM6bm9uZX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLWRheS13aWR0aCk7dG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7YWxpZ24taXRlbXM6c3RhcnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXIgLmxvbmctYmFye3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoLCAwKSp2YXIoLS1sb25nLCAwKSAtIHZhcigtLWRheS13aWR0aCwgMCkqMC41KTttaW4td2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgsIDApKnZhcigtLWxvbmcsIDApIC0gdmFyKC0tZGF5LXdpZHRoLCAwKSowLjUpO2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMy41cHgpO2xpbmUtaGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSk7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMDttYXJnaW4tbGVmdDotM3B4O21hcmdpbi10b3A6MXB4O21hcmdpbi1ib3R0b206MXB4O29wYWNpdHk6dmFyKC0tbG9jYWwtb3BhY2l0eSwxKTtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjIpO2JvcmRlci1sZWZ0LXdpZHRoOjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXItY29udGFpbmVyIC5sb25nLWJhci5zb2xpZHtvcGFjaXR5OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXIgLmxvbmctYmFyOmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDo0cHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXJ7Ym94LXNoYWRvdzowIDAgMnB4IDdweCByZ2JhKDExMywxODksMjU1LC40KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3ZlcisuZmxvYXQtYm94LWV4dCAubG9uZy1iYXJ7Ym94LXNoYWRvdzowIDAgMnB4IDRweCByZ2JhKDExMywxODksMjU1LC40KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIucmVkLWxpZ2h0e2JhY2tncm91bmQ6I2Y4NDc0N30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIueWVsbG93LWxpZ2h0e2JhY2tncm91bmQ6I2ZkZDgzNX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuZ3JlZW4tbGlnaHR7YmFja2dyb3VuZDojMzg5OTNkfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXJ7Ym94LXNoYWRvdzowIDAgMnB4IDdweCBoc2xhKDAsMCUsNDcuOCUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXIrLmZsb2F0LWJveC1leHQgLmxvbmctYmFye2JveC1zaGFkb3c6MCAwIDJweCA0cHggaHNsYSgwLDAlLDQ3LjglLC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Ky5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5yZWQtbGlnaHR7YmFja2dyb3VuZDojYWExYTFhfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3grLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLnllbGxvdy1saWdodHtiYWNrZ3JvdW5kOiNmYmNkMDB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuZ3JlZW4tbGlnaHR7YmFja2dyb3VuZDojMzg4ZTNjfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhLmRhcmstdGhlbWUgc3Bhbi5kYXRhLnNoYXBlLW91dGxpbmVke2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFye3dpZHRoOjEwMCU7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSw4Ni43JSwuMik7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt0cmFuc2l0aW9uOmhlaWdodCAxcyBlYXNlfS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyLmhpZGUtcHJvZ3Jlc3N7aGVpZ2h0OjB9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YmVmb3Jley13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bG9hZGluZy1mYXN0MTthbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QxOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0Oy13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt3aWR0aDo2Mi41JTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiMyOTI5Mjk7LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246MnM7YW5pbWF0aW9uLWR1cmF0aW9uOjJzfS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyOmFmdGVyey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bG9hZGluZy1mYXN0MjthbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QyOy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OjEuM3M7YW5pbWF0aW9uLWRlbGF5OjEuM3M7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9c3Bhbi5tZGl7bWluLXdpZHRoOjE0cHg7bWluLWhlaWdodDoxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfXNwYW4ubWRpLm1kaS1zdWJkaXJlY3RvcnktYXJyb3ctcmlnaHR7Y29sb3I6cmdiYSgwLDAsMCwuMil9LmNhcGliYXJhIC5saWdodHtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7ZmxleDowIDAgMThweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW46MTJweCA4cHg7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLC4zKTtiYWNrZ3JvdW5kOnZhcigtLWxpZ2h0LWNvbG9yLHVuc2V0KTtib3JkZXItY29sb3I6aHNsYSgwLDAlLDEwMCUsLjgpfS5jYXBpYmFyYSAubGlnaHQucmVkLWxpZ2h0e2JhY2tncm91bmQ6I2Y4NDc0N30uY2FwaWJhcmEgLmxpZ2h0LnllbGxvdy1saWdodHtiYWNrZ3JvdW5kOiNmZGQ4MzV9LmNhcGliYXJhIC5saWdodC5ncmVlbi1saWdodHtiYWNrZ3JvdW5kOiMzODk5M2R9LmNhcGliYXJhIC5saWdodC5kaXNhYmxlZC1saWdodHtiYWNrZ3JvdW5kOiM3MzczNzN9LmNhcGliYXJhIC5saWdodC5ibHVlLWxpZ2h0e2JhY2tncm91bmQ6IzAyNzdiZH0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHR7Ym9yZGVyLWNvbG9yOiM0MDRlNjl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmxpZ2h0LnJlZC1saWdodHtiYWNrZ3JvdW5kOiNhYTFhMWF9LmNhcGliYXJhLmRhcmstdGhlbWUgLmxpZ2h0LnllbGxvdy1saWdodHtiYWNrZ3JvdW5kOiNmYmNkMDB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmxpZ2h0LmdyZWVuLWxpZ2h0e2JhY2tncm91bmQ6IzM4OGUzY30uY2FwaWJhcmEgLnRhYi1zZWxlY3QtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jYXBpYmFyYSAudGFiLXNlbGVjdC1jb250YWluZXI6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6NnB4IHNvbGlkICNmZmZ9LmNhcGliYXJhIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kOmdyZXk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTZweDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwcHg7cGFkZGluZzozcHggMjhweCAzcHggMThweDtmb250LXdlaWdodDo3MDA7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW46OHB4O2JvcmRlci1yYWRpdXM6MzBweDt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzIGVhc2U7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lfS5jYXBpYmFyYSBzZWxlY3QudGFicy1zZWxlY3Qgb3B0aW9ue2NvbG9yOmdyZXk7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MTVweH0uY2FwaWJhcmEgc2VsZWN0LnRhYnMtc2VsZWN0LmRpc2FibGVke2NvbG9yOmdyZXl9LmNhcGliYXJhIHNlbGVjdC50YWJzLXNlbGVjdDpob3Zlcntib3JkZXItY29sb3I6Z3JleX1cIiwgXCJcIl0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/src/index.js!./node_modules/sass-loader/dist/cjs.js!./src/scss/style.scss\n");
|
|
106
|
+
eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.push([module.i, \"@import url(https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;0,900;1,300;1,400;1,500;1,700;1,900&display=swap);\"]);\n// Module\nexports.push([module.i, \":root{--header-top-height:40px;--header-height:98px;--header-labels-height:50px;--header-day-height:24px;--ex-header-height:120px;--header-input-height:20px;--nav-width:200px;--nav-item-col-width:60px;--initial-nav-width:0px;--ex-nav-width:0px;--btn-nav-width:117px;--nav-right-width:300px;--item-min-width:100px;--item-height:45px;--day-width:45px;--font-size:16px;--mobile-footer-height:50px}@-webkit-keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@-webkit-keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@-webkit-keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@-webkit-keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}@-webkit-keyframes pulseSelectedDay{0%,to{border-color:var(--selected-day-pulse-color,hsla(0,0%,100%,.5));box-shadow:0 0 0 2px var(--selected-day-pulse-color,hsla(0,0%,100%,.4)),inset 0 0 5px var(--selected-day-pulse-inset,hsla(0,0%,74.1%,.8))}25%,75%{border-color:var(--selected-day-pulse-color-mid,hsla(0,0%,100%,.7));box-shadow:0 0 0 2px var(--selected-day-pulse-color-mid,hsla(0,0%,100%,.65)),0 0 6px var(--selected-day-pulse-glow-mid,hsla(0,0%,100%,.25)),inset 0 0 5px var(--selected-day-pulse-inset,hsla(0,0%,74.1%,.8))}50%{border-color:var(--selected-day-pulse-color-strong,hsla(0,0%,100%,.95));box-shadow:0 0 0 2px var(--selected-day-pulse-color-strong,hsla(0,0%,100%,.9)),0 0 12px var(--selected-day-pulse-glow,hsla(0,0%,100%,.5)),inset 0 0 5px var(--selected-day-pulse-inset,hsla(0,0%,74.1%,.8))}}@keyframes pulseSelectedDay{0%,to{border-color:var(--selected-day-pulse-color,hsla(0,0%,100%,.5));box-shadow:0 0 0 2px var(--selected-day-pulse-color,hsla(0,0%,100%,.4)),inset 0 0 5px var(--selected-day-pulse-inset,hsla(0,0%,74.1%,.8))}25%,75%{border-color:var(--selected-day-pulse-color-mid,hsla(0,0%,100%,.7));box-shadow:0 0 0 2px var(--selected-day-pulse-color-mid,hsla(0,0%,100%,.65)),0 0 6px var(--selected-day-pulse-glow-mid,hsla(0,0%,100%,.25)),inset 0 0 5px var(--selected-day-pulse-inset,hsla(0,0%,74.1%,.8))}50%{border-color:var(--selected-day-pulse-color-strong,hsla(0,0%,100%,.95));box-shadow:0 0 0 2px var(--selected-day-pulse-color-strong,hsla(0,0%,100%,.9)),0 0 12px var(--selected-day-pulse-glow,hsla(0,0%,100%,.5)),inset 0 0 5px var(--selected-day-pulse-inset,hsla(0,0%,74.1%,.8))}}.capibara.c-red:not(.dark-theme){scrollbar-color:#df554b transparent}.capibara.c-red:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#df554b}.capibara.c-red:not(.dark-theme) .header-top{background:#fdfaf9}.capibara.c-red:not(.dark-theme) .corner{background:#fdfaf9;border-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header{background:#fdfaf9;border-bottom-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#fdfaf9)!important}.capibara.c-red:not(.dark-theme) nav.right{border-color:#f99d97}.capibara.c-red.dark-theme .header-top,.capibara.c-red.dark-theme nav.right{border-color:#ba160a}.capibara.c-red.dark-theme .container-tl header,.capibara.c-red.dark-theme .corner{border-bottom-color:#ba160a}.capibara.c-red.dark-theme ::-moz-selection,.capibara.c-red ::-moz-selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme ::selection,.capibara.c-red ::selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar,.capibara.c-red .progress-bar{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar:after,.capibara.c-red.dark-theme .progress-bar:before,.capibara.c-red .progress-bar:after,.capibara.c-red .progress-bar:before{background-color:#f44336!important}.capibara.c-red.dark-theme select.tabs-select,.capibara.c-red select.tabs-select{background-color:rgba(244,67,54,.7)!important;border-color:#f44336!important}.capibara.c-red.dark-theme .time,.capibara.c-red .time{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .time .symbol,.capibara.c-red .time .symbol{color:#f44336}.capibara.c-red.dark-theme .time input:active,.capibara.c-red.dark-theme .time input:focus,.capibara.c-red .time input:active,.capibara.c-red .time input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-box,.capibara.c-red.dark-theme .input-section select.input-select,.capibara.c-red .input-box,.capibara.c-red .input-section select.input-select{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section select.input-select:active,.capibara.c-red.dark-theme .input-section select.input-select:focus,.capibara.c-red .input-section select.input-select:active,.capibara.c-red .input-section select.input-select:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section .nav-input-file,.capibara.c-red.dark-theme .input-section input.nav-input,.capibara.c-red .input-section .nav-input-file,.capibara.c-red .input-section input.nav-input{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section .nav-input-file:active,.capibara.c-red.dark-theme .input-section .nav-input-file:focus,.capibara.c-red.dark-theme .input-section input.nav-input:active,.capibara.c-red.dark-theme .input-section input.nav-input:focus,.capibara.c-red .input-section .nav-input-file:active,.capibara.c-red .input-section .nav-input-file:focus,.capibara.c-red .input-section input.nav-input:active,.capibara.c-red .input-section input.nav-input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-red .input-section.msj-input-container textarea.msj{border:2px solid #f44336}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-red .input-section.msj-input-container textarea.msj:active,.capibara.c-red .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red .cap-btn-raised,.capibara.c-red.dark-theme .cap-btn-raised{border-color:#f44336;background:rgba(244,67,54,.8)}.capibara.c-red .cap-btn-outline,.capibara.c-red.dark-theme .cap-btn-outline{border-color:#f44336;color:#f44336}.capibara.c-red .cap-btn-outline.selected,.capibara.c-red.dark-theme .cap-btn-outline.selected{background:rgba(244,67,54,.8)}.capibara.c-red.dark-theme .select-container .selected-day,.capibara.c-red .select-container .selected-day{background:rgba(244,67,54,.3);box-shadow:inset 0 0 10px rgba(244,67,54,.5)}.capibara .c-red--background{background:#f44336!important}.capibara .c-red-d--background{background:#d2190b!important}.capibara .c-red-l--background{background:#f8877f!important}.capibara .c-red--text{color:#f44336!important}.capibara .c-red-d--text{color:#d2190b!important}.capibara .c-red-l--text{color:#f8877f!important}.capibara .detail-day .list-detail .item-detail.c-red{background:rgba(244,67,54,.2);border:1px solid #f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon{background:#f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon.outlined{border:1px solid #f44336;box-shadow:inset 0 0 0 1px rgba(244,67,54,.7)}.capibara .detail-day .list-detail .item-detail.c-red .name{color:#f44336}.capibara .float-box-container .float-box span.data.c-red{--local-color:#f44336;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-red,.capibara .float-box-container .float-box .dot.c-red,.capibara .float-box-container .float-box .rowdot--row.c-red .rowdot--dot{--local-color:#f44336}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active{background:rgba(244,67,54,.7);border-color:rgba(244,67,54,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active:hover{background:rgba(244,67,54,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-red:hover{background:rgba(244,67,54,.2);border-color:rgba(244,67,54,.9)}.capibara .input-box .mini-input-section--icon.c-red{background:#f44336}.capibara.c-pink:not(.dark-theme){scrollbar-color:#d0376b transparent}.capibara.c-pink:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#d0376b}.capibara.c-pink:not(.dark-theme) .header-top{background:#f0e3e7}.capibara.c-pink:not(.dark-theme) .corner{background:#f0e3e7;border-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header{background:#f0e3e7;border-bottom-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f0e3e7)!important}.capibara.c-pink:not(.dark-theme) nav.right{border-color:#f27ba3}.capibara.c-pink.dark-theme .header-top,.capibara.c-pink.dark-theme nav.right{border-color:#930e3b}.capibara.c-pink.dark-theme .container-tl header,.capibara.c-pink.dark-theme .corner{border-bottom-color:#930e3b}.capibara.c-pink.dark-theme ::-moz-selection,.capibara.c-pink ::-moz-selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme ::selection,.capibara.c-pink ::selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar,.capibara.c-pink .progress-bar{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar:after,.capibara.c-pink.dark-theme .progress-bar:before,.capibara.c-pink .progress-bar:after,.capibara.c-pink .progress-bar:before{background-color:#e91e63!important}.capibara.c-pink.dark-theme select.tabs-select,.capibara.c-pink select.tabs-select{background-color:rgba(233,30,99,.7)!important;border-color:#e91e63!important}.capibara.c-pink.dark-theme .time,.capibara.c-pink .time{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .time .symbol,.capibara.c-pink .time .symbol{color:#e91e63}.capibara.c-pink.dark-theme .time input:active,.capibara.c-pink.dark-theme .time input:focus,.capibara.c-pink .time input:active,.capibara.c-pink .time input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-box,.capibara.c-pink.dark-theme .input-section select.input-select,.capibara.c-pink .input-box,.capibara.c-pink .input-section select.input-select{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section select.input-select:active,.capibara.c-pink.dark-theme .input-section select.input-select:focus,.capibara.c-pink .input-section select.input-select:active,.capibara.c-pink .input-section select.input-select:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section .nav-input-file,.capibara.c-pink.dark-theme .input-section input.nav-input,.capibara.c-pink .input-section .nav-input-file,.capibara.c-pink .input-section input.nav-input{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section .nav-input-file:active,.capibara.c-pink.dark-theme .input-section .nav-input-file:focus,.capibara.c-pink.dark-theme .input-section input.nav-input:active,.capibara.c-pink.dark-theme .input-section input.nav-input:focus,.capibara.c-pink .input-section .nav-input-file:active,.capibara.c-pink .input-section .nav-input-file:focus,.capibara.c-pink .input-section input.nav-input:active,.capibara.c-pink .input-section input.nav-input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-pink .input-section.msj-input-container textarea.msj{border:2px solid #e91e63}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-pink .input-section.msj-input-container textarea.msj:active,.capibara.c-pink .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink .cap-btn-raised,.capibara.c-pink.dark-theme .cap-btn-raised{border-color:#e91e63;background:rgba(233,30,99,.8)}.capibara.c-pink .cap-btn-outline,.capibara.c-pink.dark-theme .cap-btn-outline{border-color:#e91e63;color:#e91e63}.capibara.c-pink .cap-btn-outline.selected,.capibara.c-pink.dark-theme .cap-btn-outline.selected{background:rgba(233,30,99,.8)}.capibara.c-pink.dark-theme .select-container .selected-day,.capibara.c-pink .select-container .selected-day{background:rgba(233,30,99,.3);box-shadow:inset 0 0 10px rgba(233,30,99,.5)}.capibara .c-pink--background{background:#e91e63!important}.capibara .c-pink-d--background{background:#aa1145!important}.capibara .c-pink-l--background{background:#f06493!important}.capibara .c-pink--text{color:#e91e63!important}.capibara .c-pink-d--text{color:#aa1145!important}.capibara .c-pink-l--text{color:#f06493!important}.capibara .detail-day .list-detail .item-detail.c-pink{background:rgba(233,30,99,.2);border:1px solid #e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon{background:#e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon.outlined{border:1px solid #e91e63;box-shadow:inset 0 0 0 1px rgba(233,30,99,.7)}.capibara .detail-day .list-detail .item-detail.c-pink .name{color:#e91e63}.capibara .float-box-container .float-box span.data.c-pink{--local-color:#e91e63;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-pink,.capibara .float-box-container .float-box .dot.c-pink,.capibara .float-box-container .float-box .rowdot--row.c-pink .rowdot--dot{--local-color:#e91e63}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active{background:rgba(233,30,99,.7);border-color:rgba(233,30,99,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active:hover{background:rgba(233,30,99,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink:hover{background:rgba(233,30,99,.2);border-color:rgba(233,30,99,.9)}.capibara .input-box .mini-input-section--icon.c-pink{background:#e91e63}.capibara.c-purple:not(.dark-theme){scrollbar-color:#8d3d9b transparent}.capibara.c-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#8d3d9b}.capibara.c-purple:not(.dark-theme) .header-top{background:#d6cbd8}.capibara.c-purple:not(.dark-theme) .corner{background:#d6cbd8;border-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header{background:#d6cbd8;border-bottom-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d6cbd8)!important}.capibara.c-purple:not(.dark-theme) nav.right{border-color:#ca61dc}.capibara.c-purple.dark-theme .header-top,.capibara.c-purple.dark-theme nav.right{border-color:#52145d}.capibara.c-purple.dark-theme .container-tl header,.capibara.c-purple.dark-theme .corner{border-bottom-color:#52145d}.capibara.c-purple.dark-theme ::-moz-selection,.capibara.c-purple ::-moz-selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme ::selection,.capibara.c-purple ::selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar,.capibara.c-purple .progress-bar{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar:after,.capibara.c-purple.dark-theme .progress-bar:before,.capibara.c-purple .progress-bar:after,.capibara.c-purple .progress-bar:before{background-color:#9c27b0!important}.capibara.c-purple.dark-theme select.tabs-select,.capibara.c-purple select.tabs-select{background-color:rgba(156,39,176,.7)!important;border-color:#9c27b0!important}.capibara.c-purple.dark-theme .time,.capibara.c-purple .time{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .time .symbol,.capibara.c-purple .time .symbol{color:#9c27b0}.capibara.c-purple.dark-theme .time input:active,.capibara.c-purple.dark-theme .time input:focus,.capibara.c-purple .time input:active,.capibara.c-purple .time input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-box,.capibara.c-purple.dark-theme .input-section select.input-select,.capibara.c-purple .input-box,.capibara.c-purple .input-section select.input-select{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section select.input-select:active,.capibara.c-purple.dark-theme .input-section select.input-select:focus,.capibara.c-purple .input-section select.input-select:active,.capibara.c-purple .input-section select.input-select:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section .nav-input-file,.capibara.c-purple.dark-theme .input-section input.nav-input,.capibara.c-purple .input-section .nav-input-file,.capibara.c-purple .input-section input.nav-input{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-purple.dark-theme .input-section input.nav-input:active,.capibara.c-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-purple .input-section .nav-input-file:active,.capibara.c-purple .input-section .nav-input-file:focus,.capibara.c-purple .input-section input.nav-input:active,.capibara.c-purple .input-section input.nav-input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-purple .input-section.msj-input-container textarea.msj{border:2px solid #9c27b0}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple .cap-btn-raised,.capibara.c-purple.dark-theme .cap-btn-raised{border-color:#9c27b0;background:rgba(156,39,176,.8)}.capibara.c-purple .cap-btn-outline,.capibara.c-purple.dark-theme .cap-btn-outline{border-color:#9c27b0;color:#9c27b0}.capibara.c-purple .cap-btn-outline.selected,.capibara.c-purple.dark-theme .cap-btn-outline.selected{background:rgba(156,39,176,.8)}.capibara.c-purple.dark-theme .select-container .selected-day,.capibara.c-purple .select-container .selected-day{background:rgba(156,39,176,.3);box-shadow:inset 0 0 10px rgba(156,39,176,.5)}.capibara .c-purple--background{background:#9c27b0!important}.capibara .c-purple-d--background{background:#641971!important}.capibara .c-purple-l--background{background:#c34cd7!important}.capibara .c-purple--text{color:#9c27b0!important}.capibara .c-purple-d--text{color:#641971!important}.capibara .c-purple-l--text{color:#c34cd7!important}.capibara .detail-day .list-detail .item-detail.c-purple{background:rgba(156,39,176,.2);border:1px solid #9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon{background:#9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon.outlined{border:1px solid #9c27b0;box-shadow:inset 0 0 0 1px rgba(156,39,176,.7)}.capibara .detail-day .list-detail .item-detail.c-purple .name{color:#9c27b0}.capibara .float-box-container .float-box span.data.c-purple{--local-color:#9c27b0;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-purple,.capibara .float-box-container .float-box .dot.c-purple,.capibara .float-box-container .float-box .rowdot--row.c-purple .rowdot--dot{--local-color:#9c27b0}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active{background:rgba(156,39,176,.7);border-color:rgba(156,39,176,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active:hover{background:rgba(156,39,176,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple:hover{background:rgba(156,39,176,.2);border-color:rgba(156,39,176,.9)}.capibara .input-box .mini-input-section--icon.c-purple{background:#9c27b0}.capibara.c-deep-purple:not(.dark-theme){scrollbar-color:#6e529f transparent}.capibara.c-deep-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#6e529f}.capibara.c-deep-purple:not(.dark-theme) .header-top{background:#dededf}.capibara.c-deep-purple:not(.dark-theme) .corner{background:#dededf;border-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header{background:#dededf;border-bottom-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dededf)!important}.capibara.c-deep-purple:not(.dark-theme) nav.right{border-color:#9f80d7}.capibara.c-deep-purple.dark-theme .header-top,.capibara.c-deep-purple.dark-theme nav.right{border-color:#3b216a}.capibara.c-deep-purple.dark-theme .container-tl header,.capibara.c-deep-purple.dark-theme .corner{border-bottom-color:#3b216a}.capibara.c-deep-purple.dark-theme ::-moz-selection,.capibara.c-deep-purple ::-moz-selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme ::selection,.capibara.c-deep-purple ::selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar,.capibara.c-deep-purple .progress-bar{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar:after,.capibara.c-deep-purple.dark-theme .progress-bar:before,.capibara.c-deep-purple .progress-bar:after,.capibara.c-deep-purple .progress-bar:before{background-color:#673ab7!important}.capibara.c-deep-purple.dark-theme select.tabs-select,.capibara.c-deep-purple select.tabs-select{background-color:rgba(103,58,183,.7)!important;border-color:#673ab7!important}.capibara.c-deep-purple.dark-theme .time,.capibara.c-deep-purple .time{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .time .symbol,.capibara.c-deep-purple .time .symbol{color:#673ab7}.capibara.c-deep-purple.dark-theme .time input:active,.capibara.c-deep-purple.dark-theme .time input:focus,.capibara.c-deep-purple .time input:active,.capibara.c-deep-purple .time input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-box,.capibara.c-deep-purple.dark-theme .input-section select.input-select,.capibara.c-deep-purple .input-box,.capibara.c-deep-purple .input-section select.input-select{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section select.input-select:active,.capibara.c-deep-purple.dark-theme .input-section select.input-select:focus,.capibara.c-deep-purple .input-section select.input-select:active,.capibara.c-deep-purple .input-section select.input-select:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file,.capibara.c-deep-purple.dark-theme .input-section input.nav-input,.capibara.c-deep-purple .input-section .nav-input-file,.capibara.c-deep-purple .input-section input.nav-input{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:active,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-purple .input-section .nav-input-file:active,.capibara.c-deep-purple .input-section .nav-input-file:focus,.capibara.c-deep-purple .input-section input.nav-input:active,.capibara.c-deep-purple .input-section input.nav-input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj{border:2px solid #673ab7}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple .cap-btn-raised,.capibara.c-deep-purple.dark-theme .cap-btn-raised{border-color:#673ab7;background:rgba(103,58,183,.8)}.capibara.c-deep-purple .cap-btn-outline,.capibara.c-deep-purple.dark-theme .cap-btn-outline{border-color:#673ab7;color:#673ab7}.capibara.c-deep-purple .cap-btn-outline.selected,.capibara.c-deep-purple.dark-theme .cap-btn-outline.selected{background:rgba(103,58,183,.8)}.capibara.c-deep-purple.dark-theme .select-container .selected-day,.capibara.c-deep-purple .select-container .selected-day{background:rgba(103,58,183,.3);box-shadow:inset 0 0 10px rgba(103,58,183,.5)}.capibara .c-deep-purple--background{background:#673ab7!important}.capibara .c-deep-purple-d--background{background:#46287d!important}.capibara .c-deep-purple-l--background{background:#916dd1!important}.capibara .c-deep-purple--text{color:#673ab7!important}.capibara .c-deep-purple-d--text{color:#46287d!important}.capibara .c-deep-purple-l--text{color:#916dd1!important}.capibara .detail-day .list-detail .item-detail.c-deep-purple{background:rgba(103,58,183,.2);border:1px solid #673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon{background:#673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon.outlined{border:1px solid #673ab7;box-shadow:inset 0 0 0 1px rgba(103,58,183,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-purple .name{color:#673ab7}.capibara .float-box-container .float-box span.data.c-deep-purple{--local-color:#673ab7;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-purple,.capibara .float-box-container .float-box .dot.c-deep-purple,.capibara .float-box-container .float-box .rowdot--row.c-deep-purple .rowdot--dot{--local-color:#673ab7}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active{background:rgba(103,58,183,.7);border-color:rgba(103,58,183,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active:hover{background:rgba(103,58,183,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple:hover{background:rgba(103,58,183,.2);border-color:rgba(103,58,183,.9)}.capibara .input-box .mini-input-section--icon.c-deep-purple{background:#673ab7}.capibara.c-indigo:not(.dark-theme){scrollbar-color:#57629d transparent}.capibara.c-indigo:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#57629d}.capibara.c-indigo:not(.dark-theme) .header-top{background:#e0e0e0}.capibara.c-indigo:not(.dark-theme) .corner{background:#e0e0e0;border-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header{background:#e0e0e0;border-bottom-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#e0e0e0)!important}.capibara.c-indigo:not(.dark-theme) nav.right{border-color:#8591d5}.capibara.c-indigo.dark-theme .header-top,.capibara.c-indigo.dark-theme nav.right{border-color:#252f69}.capibara.c-indigo.dark-theme .container-tl header,.capibara.c-indigo.dark-theme .corner{border-bottom-color:#252f69}.capibara.c-indigo.dark-theme ::-moz-selection,.capibara.c-indigo ::-moz-selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme ::selection,.capibara.c-indigo ::selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar,.capibara.c-indigo .progress-bar{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar:after,.capibara.c-indigo.dark-theme .progress-bar:before,.capibara.c-indigo .progress-bar:after,.capibara.c-indigo .progress-bar:before{background-color:#3f51b5!important}.capibara.c-indigo.dark-theme select.tabs-select,.capibara.c-indigo select.tabs-select{background-color:rgba(63,81,181,.7)!important;border-color:#3f51b5!important}.capibara.c-indigo.dark-theme .time,.capibara.c-indigo .time{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .time .symbol,.capibara.c-indigo .time .symbol{color:#3f51b5}.capibara.c-indigo.dark-theme .time input:active,.capibara.c-indigo.dark-theme .time input:focus,.capibara.c-indigo .time input:active,.capibara.c-indigo .time input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-box,.capibara.c-indigo.dark-theme .input-section select.input-select,.capibara.c-indigo .input-box,.capibara.c-indigo .input-section select.input-select{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section select.input-select:active,.capibara.c-indigo.dark-theme .input-section select.input-select:focus,.capibara.c-indigo .input-section select.input-select:active,.capibara.c-indigo .input-section select.input-select:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section .nav-input-file,.capibara.c-indigo.dark-theme .input-section input.nav-input,.capibara.c-indigo .input-section .nav-input-file,.capibara.c-indigo .input-section input.nav-input{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section .nav-input-file:active,.capibara.c-indigo.dark-theme .input-section .nav-input-file:focus,.capibara.c-indigo.dark-theme .input-section input.nav-input:active,.capibara.c-indigo.dark-theme .input-section input.nav-input:focus,.capibara.c-indigo .input-section .nav-input-file:active,.capibara.c-indigo .input-section .nav-input-file:focus,.capibara.c-indigo .input-section input.nav-input:active,.capibara.c-indigo .input-section input.nav-input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-indigo .input-section.msj-input-container textarea.msj{border:2px solid #3f51b5}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-indigo .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo .cap-btn-raised,.capibara.c-indigo.dark-theme .cap-btn-raised{border-color:#3f51b5;background:rgba(63,81,181,.8)}.capibara.c-indigo .cap-btn-outline,.capibara.c-indigo.dark-theme .cap-btn-outline{border-color:#3f51b5;color:#3f51b5}.capibara.c-indigo .cap-btn-outline.selected,.capibara.c-indigo.dark-theme .cap-btn-outline.selected{background:rgba(63,81,181,.8)}.capibara.c-indigo.dark-theme .select-container .selected-day,.capibara.c-indigo .select-container .selected-day{background:rgba(63,81,181,.3);box-shadow:inset 0 0 10px rgba(63,81,181,.5)}.capibara .c-indigo--background{background:#3f51b5!important}.capibara .c-indigo-d--background{background:#2b387c!important}.capibara .c-indigo-l--background{background:#7280ce!important}.capibara .c-indigo--text{color:#3f51b5!important}.capibara .c-indigo-d--text{color:#2b387c!important}.capibara .c-indigo-l--text{color:#7280ce!important}.capibara .detail-day .list-detail .item-detail.c-indigo{background:rgba(63,81,181,.2);border:1px solid #3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon{background:#3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon.outlined{border:1px solid #3f51b5;box-shadow:inset 0 0 0 1px rgba(63,81,181,.7)}.capibara .detail-day .list-detail .item-detail.c-indigo .name{color:#3f51b5}.capibara .float-box-container .float-box span.data.c-indigo{--local-color:#3f51b5;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-indigo,.capibara .float-box-container .float-box .dot.c-indigo,.capibara .float-box-container .float-box .rowdot--row.c-indigo .rowdot--dot{--local-color:#3f51b5}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active{background:rgba(63,81,181,.7);border-color:rgba(63,81,181,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active:hover{background:rgba(63,81,181,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo:hover{background:rgba(63,81,181,.2);border-color:rgba(63,81,181,.9)}.capibara .input-box .mini-input-section--icon.c-indigo{background:#3f51b5}.capibara.c-blue:not(.dark-theme){scrollbar-color:#3176bb transparent}.capibara.c-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3176bb}.capibara.c-blue:not(.dark-theme) .header-top{background:#d1dce6}.capibara.c-blue:not(.dark-theme) .corner{background:#d1dce6;border-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header{background:#d1dce6;border-bottom-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d1dce6)!important}.capibara.c-blue:not(.dark-theme) nav.right{border-color:#64a9ed}.capibara.c-blue.dark-theme .header-top,.capibara.c-blue.dark-theme nav.right{border-color:#0e4377}.capibara.c-blue.dark-theme .container-tl header,.capibara.c-blue.dark-theme .corner{border-bottom-color:#0e4377}.capibara.c-blue.dark-theme ::-moz-selection,.capibara.c-blue ::-moz-selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme ::selection,.capibara.c-blue ::selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar,.capibara.c-blue .progress-bar{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar:after,.capibara.c-blue.dark-theme .progress-bar:before,.capibara.c-blue .progress-bar:after,.capibara.c-blue .progress-bar:before{background-color:#1976d2!important}.capibara.c-blue.dark-theme select.tabs-select,.capibara.c-blue select.tabs-select{background-color:rgba(25,118,210,.7)!important;border-color:#1976d2!important}.capibara.c-blue.dark-theme .time,.capibara.c-blue .time{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .time .symbol,.capibara.c-blue .time .symbol{color:#1976d2}.capibara.c-blue.dark-theme .time input:active,.capibara.c-blue.dark-theme .time input:focus,.capibara.c-blue .time input:active,.capibara.c-blue .time input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-box,.capibara.c-blue.dark-theme .input-section select.input-select,.capibara.c-blue .input-box,.capibara.c-blue .input-section select.input-select{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section select.input-select:active,.capibara.c-blue.dark-theme .input-section select.input-select:focus,.capibara.c-blue .input-section select.input-select:active,.capibara.c-blue .input-section select.input-select:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section .nav-input-file,.capibara.c-blue.dark-theme .input-section input.nav-input,.capibara.c-blue .input-section .nav-input-file,.capibara.c-blue .input-section input.nav-input{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue.dark-theme .input-section input.nav-input:active,.capibara.c-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-blue .input-section .nav-input-file:active,.capibara.c-blue .input-section .nav-input-file:focus,.capibara.c-blue .input-section input.nav-input:active,.capibara.c-blue .input-section input.nav-input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue .input-section.msj-input-container textarea.msj{border:2px solid #1976d2}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue .cap-btn-raised,.capibara.c-blue.dark-theme .cap-btn-raised{border-color:#1976d2;background:rgba(25,118,210,.8)}.capibara.c-blue .cap-btn-outline,.capibara.c-blue.dark-theme .cap-btn-outline{border-color:#1976d2;color:#1976d2}.capibara.c-blue .cap-btn-outline.selected,.capibara.c-blue.dark-theme .cap-btn-outline.selected{background:rgba(25,118,210,.8)}.capibara.c-blue.dark-theme .select-container .selected-day,.capibara.c-blue .select-container .selected-day{background:rgba(25,118,210,.3);box-shadow:inset 0 0 10px rgba(25,118,210,.5)}.capibara .c-blue--background{background:#1976d2!important}.capibara .c-blue-d--background{background:#11508e!important}.capibara .c-blue-l--background{background:#4e9cea!important}.capibara .c-blue--text{color:#1976d2!important}.capibara .c-blue-d--text{color:#11508e!important}.capibara .c-blue-l--text{color:#4e9cea!important}.capibara .detail-day .list-detail .item-detail.c-blue{background:rgba(25,118,210,.2);border:1px solid #1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon{background:#1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon.outlined{border:1px solid #1976d2;box-shadow:inset 0 0 0 1px rgba(25,118,210,.7)}.capibara .detail-day .list-detail .item-detail.c-blue .name{color:#1976d2}.capibara .float-box-container .float-box span.data.c-blue{--local-color:#1976d2;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue,.capibara .float-box-container .float-box .dot.c-blue,.capibara .float-box-container .float-box .rowdot--row.c-blue .rowdot--dot{--local-color:#1976d2}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active{background:rgba(25,118,210,.7);border-color:rgba(25,118,210,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active:hover{background:rgba(25,118,210,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue:hover{background:rgba(25,118,210,.2);border-color:rgba(25,118,210,.9)}.capibara .input-box .mini-input-section--icon.c-blue{background:#1976d2}.capibara.c-light-blue:not(.dark-theme){scrollbar-color:#1ca0db transparent}.capibara.c-light-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#1ca0db}.capibara.c-light-blue:not(.dark-theme) .header-top{background:#d3e7f0}.capibara.c-light-blue:not(.dark-theme) .corner{background:#d3e7f0;border-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header{background:#d3e7f0;border-bottom-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d3e7f0)!important}.capibara.c-light-blue:not(.dark-theme) nav.right{border-color:#60ccfd}.capibara.c-light-blue.dark-theme .header-top,.capibara.c-light-blue.dark-theme nav.right{border-color:#02638f}.capibara.c-light-blue.dark-theme .container-tl header,.capibara.c-light-blue.dark-theme .corner{border-bottom-color:#02638f}.capibara.c-light-blue.dark-theme ::-moz-selection,.capibara.c-light-blue ::-moz-selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme ::selection,.capibara.c-light-blue ::selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar,.capibara.c-light-blue .progress-bar{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar:after,.capibara.c-light-blue.dark-theme .progress-bar:before,.capibara.c-light-blue .progress-bar:after,.capibara.c-light-blue .progress-bar:before{background-color:#03a9f4!important}.capibara.c-light-blue.dark-theme select.tabs-select,.capibara.c-light-blue select.tabs-select{background-color:rgba(3,169,244,.7)!important;border-color:#03a9f4!important}.capibara.c-light-blue.dark-theme .time,.capibara.c-light-blue .time{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .time .symbol,.capibara.c-light-blue .time .symbol{color:#03a9f4}.capibara.c-light-blue.dark-theme .time input:active,.capibara.c-light-blue.dark-theme .time input:focus,.capibara.c-light-blue .time input:active,.capibara.c-light-blue .time input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-box,.capibara.c-light-blue.dark-theme .input-section select.input-select,.capibara.c-light-blue .input-box,.capibara.c-light-blue .input-section select.input-select{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section select.input-select:active,.capibara.c-light-blue.dark-theme .input-section select.input-select:focus,.capibara.c-light-blue .input-section select.input-select:active,.capibara.c-light-blue .input-section select.input-select:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file,.capibara.c-light-blue.dark-theme .input-section input.nav-input,.capibara.c-light-blue .input-section .nav-input-file,.capibara.c-light-blue .input-section input.nav-input{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-light-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-blue.dark-theme .input-section input.nav-input:active,.capibara.c-light-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-light-blue .input-section .nav-input-file:active,.capibara.c-light-blue .input-section .nav-input-file:focus,.capibara.c-light-blue .input-section input.nav-input:active,.capibara.c-light-blue .input-section input.nav-input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-blue .input-section.msj-input-container textarea.msj{border:2px solid #03a9f4}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue .cap-btn-raised,.capibara.c-light-blue.dark-theme .cap-btn-raised{border-color:#03a9f4;background:rgba(3,169,244,.8)}.capibara.c-light-blue .cap-btn-outline,.capibara.c-light-blue.dark-theme .cap-btn-outline{border-color:#03a9f4;color:#03a9f4}.capibara.c-light-blue .cap-btn-outline.selected,.capibara.c-light-blue.dark-theme .cap-btn-outline.selected{background:rgba(3,169,244,.8)}.capibara.c-light-blue.dark-theme .select-container .selected-day,.capibara.c-light-blue .select-container .selected-day{background:rgba(3,169,244,.3);box-shadow:inset 0 0 10px rgba(3,169,244,.5)}.capibara .c-light-blue--background{background:#03a9f4!important}.capibara .c-light-blue-d--background{background:#0275a8!important}.capibara .c-light-blue-l--background{background:#47c4fd!important}.capibara .c-light-blue--text{color:#03a9f4!important}.capibara .c-light-blue-d--text{color:#0275a8!important}.capibara .c-light-blue-l--text{color:#47c4fd!important}.capibara .detail-day .list-detail .item-detail.c-light-blue{background:rgba(3,169,244,.2);border:1px solid #03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon{background:#03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon.outlined{border:1px solid #03a9f4;box-shadow:inset 0 0 0 1px rgba(3,169,244,.7)}.capibara .detail-day .list-detail .item-detail.c-light-blue .name{color:#03a9f4}.capibara .float-box-container .float-box span.data.c-light-blue{--local-color:#03a9f4;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-light-blue,.capibara .float-box-container .float-box .dot.c-light-blue,.capibara .float-box-container .float-box .rowdot--row.c-light-blue .rowdot--dot{--local-color:#03a9f4}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active{background:rgba(3,169,244,.7);border-color:rgba(3,169,244,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active:hover{background:rgba(3,169,244,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue:hover{background:rgba(3,169,244,.2);border-color:rgba(3,169,244,.9)}.capibara .input-box .mini-input-section--icon.c-light-blue{background:#03a9f4}.capibara.c-cyan:not(.dark-theme){scrollbar-color:#15acbf transparent}.capibara.c-cyan:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#15acbf}.capibara.c-cyan:not(.dark-theme) .header-top{background:#b9e2e8}.capibara.c-cyan:not(.dark-theme) .corner{background:#b9e2e8;border-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header{background:#b9e2e8;border-bottom-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#b9e2e8)!important}.capibara.c-cyan:not(.dark-theme) nav.right{border-color:#3be9ff}.capibara.c-cyan.dark-theme .header-top,.capibara.c-cyan.dark-theme nav.right{border-color:#00626e}.capibara.c-cyan.dark-theme .container-tl header,.capibara.c-cyan.dark-theme .corner{border-bottom-color:#00626e}.capibara.c-cyan.dark-theme ::-moz-selection,.capibara.c-cyan ::-moz-selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme ::selection,.capibara.c-cyan ::selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar,.capibara.c-cyan .progress-bar{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar:after,.capibara.c-cyan.dark-theme .progress-bar:before,.capibara.c-cyan .progress-bar:after,.capibara.c-cyan .progress-bar:before{background-color:#00bcd4!important}.capibara.c-cyan.dark-theme select.tabs-select,.capibara.c-cyan select.tabs-select{background-color:rgba(0,188,212,.7)!important;border-color:#00bcd4!important}.capibara.c-cyan.dark-theme .time,.capibara.c-cyan .time{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .time .symbol,.capibara.c-cyan .time .symbol{color:#00bcd4}.capibara.c-cyan.dark-theme .time input:active,.capibara.c-cyan.dark-theme .time input:focus,.capibara.c-cyan .time input:active,.capibara.c-cyan .time input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-box,.capibara.c-cyan.dark-theme .input-section select.input-select,.capibara.c-cyan .input-box,.capibara.c-cyan .input-section select.input-select{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section select.input-select:active,.capibara.c-cyan.dark-theme .input-section select.input-select:focus,.capibara.c-cyan .input-section select.input-select:active,.capibara.c-cyan .input-section select.input-select:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section .nav-input-file,.capibara.c-cyan.dark-theme .input-section input.nav-input,.capibara.c-cyan .input-section .nav-input-file,.capibara.c-cyan .input-section input.nav-input{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section .nav-input-file:active,.capibara.c-cyan.dark-theme .input-section .nav-input-file:focus,.capibara.c-cyan.dark-theme .input-section input.nav-input:active,.capibara.c-cyan.dark-theme .input-section input.nav-input:focus,.capibara.c-cyan .input-section .nav-input-file:active,.capibara.c-cyan .input-section .nav-input-file:focus,.capibara.c-cyan .input-section input.nav-input:active,.capibara.c-cyan .input-section input.nav-input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-cyan .input-section.msj-input-container textarea.msj{border:2px solid #00bcd4}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-cyan .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan .cap-btn-raised,.capibara.c-cyan.dark-theme .cap-btn-raised{border-color:#00bcd4;background:rgba(0,188,212,.8)}.capibara.c-cyan .cap-btn-outline,.capibara.c-cyan.dark-theme .cap-btn-outline{border-color:#00bcd4;color:#00bcd4}.capibara.c-cyan .cap-btn-outline.selected,.capibara.c-cyan.dark-theme .cap-btn-outline.selected{background:rgba(0,188,212,.8)}.capibara.c-cyan.dark-theme .select-container .selected-day,.capibara.c-cyan .select-container .selected-day{background:rgba(0,188,212,.3);box-shadow:inset 0 0 10px rgba(0,188,212,.5)}.capibara .c-cyan--background{background:#00bcd4!important}.capibara .c-cyan-d--background{background:#007888!important}.capibara .c-cyan-l--background{background:#22e6ff!important}.capibara .c-cyan--text{color:#00bcd4!important}.capibara .c-cyan-d--text{color:#007888!important}.capibara .c-cyan-l--text{color:#22e6ff!important}.capibara .detail-day .list-detail .item-detail.c-cyan{background:rgba(0,188,212,.2);border:1px solid #00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon{background:#00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon.outlined{border:1px solid #00bcd4;box-shadow:inset 0 0 0 1px rgba(0,188,212,.7)}.capibara .detail-day .list-detail .item-detail.c-cyan .name{color:#00bcd4}.capibara .float-box-container .float-box span.data.c-cyan{--local-color:#00bcd4;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-cyan,.capibara .float-box-container .float-box .dot.c-cyan,.capibara .float-box-container .float-box .rowdot--row.c-cyan .rowdot--dot{--local-color:#00bcd4}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active{background:rgba(0,188,212,.7);border-color:rgba(0,188,212,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active:hover{background:rgba(0,188,212,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan:hover{background:rgba(0,188,212,.2);border-color:rgba(0,188,212,.9)}.capibara .input-box .mini-input-section--icon.c-cyan{background:#00bcd4}.capibara.c-teal:not(.dark-theme){scrollbar-color:#0f877c transparent}.capibara.c-teal:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#0f877c}.capibara.c-teal:not(.dark-theme) .header-top{background:#8ad8d1}.capibara.c-teal:not(.dark-theme) .corner{background:#8ad8d1;border-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header{background:#8ad8d1;border-bottom-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#8ad8d1)!important}.capibara.c-teal:not(.dark-theme) nav.right{border-color:#00fce4}.capibara.c-teal.dark-theme .header-top,.capibara.c-teal.dark-theme nav.right{border-color:#00302c}.capibara.c-teal.dark-theme .container-tl header,.capibara.c-teal.dark-theme .corner{border-bottom-color:#00302c}.capibara.c-teal.dark-theme ::-moz-selection,.capibara.c-teal ::-moz-selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme ::selection,.capibara.c-teal ::selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar,.capibara.c-teal .progress-bar{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar:after,.capibara.c-teal.dark-theme .progress-bar:before,.capibara.c-teal .progress-bar:after,.capibara.c-teal .progress-bar:before{background-color:#009688!important}.capibara.c-teal.dark-theme select.tabs-select,.capibara.c-teal select.tabs-select{background-color:rgba(0,150,136,.7)!important;border-color:#009688!important}.capibara.c-teal.dark-theme .time,.capibara.c-teal .time{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .time .symbol,.capibara.c-teal .time .symbol{color:#009688}.capibara.c-teal.dark-theme .time input:active,.capibara.c-teal.dark-theme .time input:focus,.capibara.c-teal .time input:active,.capibara.c-teal .time input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-box,.capibara.c-teal.dark-theme .input-section select.input-select,.capibara.c-teal .input-box,.capibara.c-teal .input-section select.input-select{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section select.input-select:active,.capibara.c-teal.dark-theme .input-section select.input-select:focus,.capibara.c-teal .input-section select.input-select:active,.capibara.c-teal .input-section select.input-select:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section .nav-input-file,.capibara.c-teal.dark-theme .input-section input.nav-input,.capibara.c-teal .input-section .nav-input-file,.capibara.c-teal .input-section input.nav-input{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section .nav-input-file:active,.capibara.c-teal.dark-theme .input-section .nav-input-file:focus,.capibara.c-teal.dark-theme .input-section input.nav-input:active,.capibara.c-teal.dark-theme .input-section input.nav-input:focus,.capibara.c-teal .input-section .nav-input-file:active,.capibara.c-teal .input-section .nav-input-file:focus,.capibara.c-teal .input-section input.nav-input:active,.capibara.c-teal .input-section input.nav-input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-teal .input-section.msj-input-container textarea.msj{border:2px solid #009688}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-teal .input-section.msj-input-container textarea.msj:active,.capibara.c-teal .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal .cap-btn-raised,.capibara.c-teal.dark-theme .cap-btn-raised{border-color:#009688;background:rgba(0,150,136,.8)}.capibara.c-teal .cap-btn-outline,.capibara.c-teal.dark-theme .cap-btn-outline{border-color:#009688;color:#009688}.capibara.c-teal .cap-btn-outline.selected,.capibara.c-teal.dark-theme .cap-btn-outline.selected{background:rgba(0,150,136,.8)}.capibara.c-teal.dark-theme .select-container .selected-day,.capibara.c-teal .select-container .selected-day{background:rgba(0,150,136,.3);box-shadow:inset 0 0 10px rgba(0,150,136,.5)}.capibara .c-teal--background{background:#009688!important}.capibara .c-teal-d--background{background:#004a43!important}.capibara .c-teal-l--background{background:#00e3cd!important}.capibara .c-teal--text{color:#009688!important}.capibara .c-teal-d--text{color:#004a43!important}.capibara .c-teal-l--text{color:#00e3cd!important}.capibara .detail-day .list-detail .item-detail.c-teal{background:rgba(0,150,136,.2);border:1px solid #009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon{background:#009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon.outlined{border:1px solid #009688;box-shadow:inset 0 0 0 1px rgba(0,150,136,.7)}.capibara .detail-day .list-detail .item-detail.c-teal .name{color:#009688}.capibara .float-box-container .float-box span.data.c-teal{--local-color:#009688;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-teal,.capibara .float-box-container .float-box .dot.c-teal,.capibara .float-box-container .float-box .rowdot--row.c-teal .rowdot--dot{--local-color:#009688}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active{background:rgba(0,150,136,.7);border-color:rgba(0,150,136,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active:hover{background:rgba(0,150,136,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal:hover{background:rgba(0,150,136,.2);border-color:rgba(0,150,136,.9)}.capibara .input-box .mini-input-section--icon.c-teal{background:#009688}.capibara.c-green:not(.dark-theme){scrollbar-color:#3f6c41 transparent}.capibara.c-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3f6c41}.capibara.c-green:not(.dark-theme) .header-top{background:#bcbcbc}.capibara.c-green:not(.dark-theme) .corner{background:#bcbcbc;border-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header{background:#bcbcbc;border-bottom-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#bcbcbc)!important}.capibara.c-green:not(.dark-theme) nav.right{border-color:#52bf57}.capibara.c-green.dark-theme .header-top,.capibara.c-green.dark-theme nav.right{border-color:#133214}.capibara.c-green.dark-theme .container-tl header,.capibara.c-green.dark-theme .corner{border-bottom-color:#133214}.capibara.c-green.dark-theme ::-moz-selection,.capibara.c-green ::-moz-selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme ::selection,.capibara.c-green ::selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar,.capibara.c-green .progress-bar{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar:after,.capibara.c-green.dark-theme .progress-bar:before,.capibara.c-green .progress-bar:after,.capibara.c-green .progress-bar:before{background-color:#2e7d32!important}.capibara.c-green.dark-theme select.tabs-select,.capibara.c-green select.tabs-select{background-color:rgba(46,125,50,.7)!important;border-color:#2e7d32!important}.capibara.c-green.dark-theme .time,.capibara.c-green .time{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .time .symbol,.capibara.c-green .time .symbol{color:#2e7d32}.capibara.c-green.dark-theme .time input:active,.capibara.c-green.dark-theme .time input:focus,.capibara.c-green .time input:active,.capibara.c-green .time input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-box,.capibara.c-green.dark-theme .input-section select.input-select,.capibara.c-green .input-box,.capibara.c-green .input-section select.input-select{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section select.input-select:active,.capibara.c-green.dark-theme .input-section select.input-select:focus,.capibara.c-green .input-section select.input-select:active,.capibara.c-green .input-section select.input-select:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section .nav-input-file,.capibara.c-green.dark-theme .input-section input.nav-input,.capibara.c-green .input-section .nav-input-file,.capibara.c-green .input-section input.nav-input{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section .nav-input-file:active,.capibara.c-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-green.dark-theme .input-section input.nav-input:active,.capibara.c-green.dark-theme .input-section input.nav-input:focus,.capibara.c-green .input-section .nav-input-file:active,.capibara.c-green .input-section .nav-input-file:focus,.capibara.c-green .input-section input.nav-input:active,.capibara.c-green .input-section input.nav-input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-green .input-section.msj-input-container textarea.msj{border:2px solid #2e7d32}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-green .input-section.msj-input-container textarea.msj:active,.capibara.c-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green .cap-btn-raised,.capibara.c-green.dark-theme .cap-btn-raised{border-color:#2e7d32;background:rgba(46,125,50,.8)}.capibara.c-green .cap-btn-outline,.capibara.c-green.dark-theme .cap-btn-outline{border-color:#2e7d32;color:#2e7d32}.capibara.c-green .cap-btn-outline.selected,.capibara.c-green.dark-theme .cap-btn-outline.selected{background:rgba(46,125,50,.8)}.capibara.c-green.dark-theme .select-container .selected-day,.capibara.c-green .select-container .selected-day{background:rgba(46,125,50,.3);box-shadow:inset 0 0 10px rgba(46,125,50,.5)}.capibara .c-green--background{background:#2e7d32!important}.capibara .c-green-d--background{background:#19451c!important}.capibara .c-green-l--background{background:#43b548!important}.capibara .c-green--text{color:#2e7d32!important}.capibara .c-green-d--text{color:#19451c!important}.capibara .c-green-l--text{color:#43b548!important}.capibara .detail-day .list-detail .item-detail.c-green{background:rgba(46,125,50,.2);border:1px solid #2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon{background:#2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon.outlined{border:1px solid #2e7d32;box-shadow:inset 0 0 0 1px rgba(46,125,50,.7)}.capibara .detail-day .list-detail .item-detail.c-green .name{color:#2e7d32}.capibara .float-box-container .float-box span.data.c-green{--local-color:#2e7d32;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-green,.capibara .float-box-container .float-box .dot.c-green,.capibara .float-box-container .float-box .rowdot--row.c-green .rowdot--dot{--local-color:#2e7d32}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active{background:rgba(46,125,50,.7);border-color:rgba(46,125,50,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active:hover{background:rgba(46,125,50,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-green:hover{background:rgba(46,125,50,.2);border-color:rgba(46,125,50,.9)}.capibara .input-box .mini-input-section--icon.c-green{background:#2e7d32}.capibara.c-light-green:not(.dark-theme){scrollbar-color:#89ab62 transparent}.capibara.c-light-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#89ab62}.capibara.c-light-green:not(.dark-theme) .header-top{background:#ededec}.capibara.c-light-green:not(.dark-theme) .corner{background:#ededec;border-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header{background:#ededec;border-bottom-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ededec)!important}.capibara.c-light-green:not(.dark-theme) nav.right{border-color:#bcdc97}.capibara.c-light-green.dark-theme .header-top,.capibara.c-light-green.dark-theme nav.right{border-color:#577d2a}.capibara.c-light-green.dark-theme .container-tl header,.capibara.c-light-green.dark-theme .corner{border-bottom-color:#577d2a}.capibara.c-light-green.dark-theme ::-moz-selection,.capibara.c-light-green ::-moz-selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme ::selection,.capibara.c-light-green ::selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar,.capibara.c-light-green .progress-bar{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar:after,.capibara.c-light-green.dark-theme .progress-bar:before,.capibara.c-light-green .progress-bar:after,.capibara.c-light-green .progress-bar:before{background-color:#8bc34a!important}.capibara.c-light-green.dark-theme select.tabs-select,.capibara.c-light-green select.tabs-select{background-color:rgba(139,195,74,.7)!important;border-color:#8bc34a!important}.capibara.c-light-green.dark-theme .time,.capibara.c-light-green .time{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .time .symbol,.capibara.c-light-green .time .symbol{color:#8bc34a}.capibara.c-light-green.dark-theme .time input:active,.capibara.c-light-green.dark-theme .time input:focus,.capibara.c-light-green .time input:active,.capibara.c-light-green .time input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-box,.capibara.c-light-green.dark-theme .input-section select.input-select,.capibara.c-light-green .input-box,.capibara.c-light-green .input-section select.input-select{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section select.input-select:active,.capibara.c-light-green.dark-theme .input-section select.input-select:focus,.capibara.c-light-green .input-section select.input-select:active,.capibara.c-light-green .input-section select.input-select:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section .nav-input-file,.capibara.c-light-green.dark-theme .input-section input.nav-input,.capibara.c-light-green .input-section .nav-input-file,.capibara.c-light-green .input-section input.nav-input{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section .nav-input-file:active,.capibara.c-light-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-green.dark-theme .input-section input.nav-input:active,.capibara.c-light-green.dark-theme .input-section input.nav-input:focus,.capibara.c-light-green .input-section .nav-input-file:active,.capibara.c-light-green .input-section .nav-input-file:focus,.capibara.c-light-green .input-section input.nav-input:active,.capibara.c-light-green .input-section input.nav-input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-green .input-section.msj-input-container textarea.msj{border:2px solid #8bc34a}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-green .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green .cap-btn-raised,.capibara.c-light-green.dark-theme .cap-btn-raised{border-color:#8bc34a;background:rgba(139,195,74,.8)}.capibara.c-light-green .cap-btn-outline,.capibara.c-light-green.dark-theme .cap-btn-outline{border-color:#8bc34a;color:#8bc34a}.capibara.c-light-green .cap-btn-outline.selected,.capibara.c-light-green.dark-theme .cap-btn-outline.selected{background:rgba(139,195,74,.8)}.capibara.c-light-green.dark-theme .select-container .selected-day,.capibara.c-light-green .select-container .selected-day{background:rgba(139,195,74,.3);box-shadow:inset 0 0 10px rgba(139,195,74,.5)}.capibara .c-light-green--background{background:#8bc34a!important}.capibara .c-light-green-d--background{background:#649130!important}.capibara .c-light-green-l--background{background:#b0d683!important}.capibara .c-light-green--text{color:#8bc34a!important}.capibara .c-light-green-d--text{color:#649130!important}.capibara .c-light-green-l--text{color:#b0d683!important}.capibara .detail-day .list-detail .item-detail.c-light-green{background:rgba(139,195,74,.2);border:1px solid #8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon{background:#8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon.outlined{border:1px solid #8bc34a;box-shadow:inset 0 0 0 1px rgba(139,195,74,.7)}.capibara .detail-day .list-detail .item-detail.c-light-green .name{color:#8bc34a}.capibara .float-box-container .float-box span.data.c-light-green{--local-color:#8bc34a;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-light-green,.capibara .float-box-container .float-box .dot.c-light-green,.capibara .float-box-container .float-box .rowdot--row.c-light-green .rowdot--dot{--local-color:#8bc34a}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active{background:rgba(139,195,74,.7);border-color:rgba(139,195,74,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active:hover{background:rgba(139,195,74,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green:hover{background:rgba(139,195,74,.2);border-color:rgba(139,195,74,.9)}.capibara .input-box .mini-input-section--icon.c-light-green{background:#8bc34a}.capibara.c-lime:not(.dark-theme){scrollbar-color:#bac550 transparent}.capibara.c-lime:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#bac550}.capibara.c-lime:not(.dark-theme) .header-top{background:#f3f3ee}.capibara.c-lime:not(.dark-theme) .corner{background:#f3f3ee;border-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header{background:#f3f3ee;border-bottom-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f3f3ee)!important}.capibara.c-lime:not(.dark-theme) nav.right{border-color:#e3eb90}.capibara.c-lime.dark-theme .header-top,.capibara.c-lime.dark-theme nav.right{border-color:#89951a}.capibara.c-lime.dark-theme .container-tl header,.capibara.c-lime.dark-theme .corner{border-bottom-color:#89951a}.capibara.c-lime.dark-theme ::-moz-selection,.capibara.c-lime ::-moz-selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme ::selection,.capibara.c-lime ::selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar,.capibara.c-lime .progress-bar{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar:after,.capibara.c-lime.dark-theme .progress-bar:before,.capibara.c-lime .progress-bar:after,.capibara.c-lime .progress-bar:before{background-color:#cddc39!important}.capibara.c-lime.dark-theme select.tabs-select,.capibara.c-lime select.tabs-select{background-color:rgba(205,220,57,.7)!important;border-color:#cddc39!important}.capibara.c-lime.dark-theme .time,.capibara.c-lime .time{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .time .symbol,.capibara.c-lime .time .symbol{color:#cddc39}.capibara.c-lime.dark-theme .time input:active,.capibara.c-lime.dark-theme .time input:focus,.capibara.c-lime .time input:active,.capibara.c-lime .time input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-box,.capibara.c-lime.dark-theme .input-section select.input-select,.capibara.c-lime .input-box,.capibara.c-lime .input-section select.input-select{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section select.input-select:active,.capibara.c-lime.dark-theme .input-section select.input-select:focus,.capibara.c-lime .input-section select.input-select:active,.capibara.c-lime .input-section select.input-select:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section .nav-input-file,.capibara.c-lime.dark-theme .input-section input.nav-input,.capibara.c-lime .input-section .nav-input-file,.capibara.c-lime .input-section input.nav-input{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section .nav-input-file:active,.capibara.c-lime.dark-theme .input-section .nav-input-file:focus,.capibara.c-lime.dark-theme .input-section input.nav-input:active,.capibara.c-lime.dark-theme .input-section input.nav-input:focus,.capibara.c-lime .input-section .nav-input-file:active,.capibara.c-lime .input-section .nav-input-file:focus,.capibara.c-lime .input-section input.nav-input:active,.capibara.c-lime .input-section input.nav-input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-lime .input-section.msj-input-container textarea.msj{border:2px solid #cddc39}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-lime .input-section.msj-input-container textarea.msj:active,.capibara.c-lime .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime .cap-btn-raised,.capibara.c-lime.dark-theme .cap-btn-raised{border-color:#cddc39;background:rgba(205,220,57,.8)}.capibara.c-lime .cap-btn-outline,.capibara.c-lime.dark-theme .cap-btn-outline{border-color:#cddc39;color:#cddc39}.capibara.c-lime .cap-btn-outline.selected,.capibara.c-lime.dark-theme .cap-btn-outline.selected{background:rgba(205,220,57,.8)}.capibara.c-lime.dark-theme .select-container .selected-day,.capibara.c-lime .select-container .selected-day{background:rgba(205,220,57,.3);box-shadow:inset 0 0 10px rgba(205,220,57,.5)}.capibara .c-lime--background{background:#cddc39!important}.capibara .c-lime-d--background{background:#9daa1e!important}.capibara .c-lime-l--background{background:#dde77a!important}.capibara .c-lime--text{color:#cddc39!important}.capibara .c-lime-d--text{color:#9daa1e!important}.capibara .c-lime-l--text{color:#dde77a!important}.capibara .detail-day .list-detail .item-detail.c-lime{background:rgba(205,220,57,.2);border:1px solid #cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon{background:#cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon.outlined{border:1px solid #cddc39;box-shadow:inset 0 0 0 1px rgba(205,220,57,.7)}.capibara .detail-day .list-detail .item-detail.c-lime .name{color:#cddc39}.capibara .float-box-container .float-box span.data.c-lime{--local-color:#cddc39;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-lime,.capibara .float-box-container .float-box .dot.c-lime,.capibara .float-box-container .float-box .rowdot--row.c-lime .rowdot--dot{--local-color:#cddc39}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active{background:rgba(205,220,57,.7);border-color:rgba(205,220,57,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active:hover{background:rgba(205,220,57,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime:hover{background:rgba(205,220,57,.2);border-color:rgba(205,220,57,.9)}.capibara .input-box .mini-input-section--icon.c-lime{background:#cddc39}.capibara.c-yellow:not(.dark-theme){scrollbar-color:#bca24f transparent}.capibara.c-yellow:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#bca24f}.capibara.c-yellow:not(.dark-theme) .header-top{background:#eeede9}.capibara.c-yellow:not(.dark-theme) .corner{background:#eeede9;border-color:#e6d18b}.capibara.c-yellow:not(.dark-theme) .container-tl header{background:#eeede9;border-bottom-color:#e6d18b}.capibara.c-yellow:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#eeede9)!important}.capibara.c-yellow:not(.dark-theme) nav.right{border-color:#e6d18b}.capibara.c-yellow.dark-theme .header-top,.capibara.c-yellow.dark-theme nav.right{border-color:#886f1d}.capibara.c-yellow.dark-theme .container-tl header,.capibara.c-yellow.dark-theme .corner{border-bottom-color:#886f1d}.capibara.c-yellow.dark-theme ::-moz-selection,.capibara.c-yellow ::-moz-selection{background-color:rgba(212,175,55,.2)!important}.capibara.c-yellow.dark-theme ::selection,.capibara.c-yellow ::selection{background-color:rgba(212,175,55,.2)!important}.capibara.c-yellow.dark-theme .progress-bar,.capibara.c-yellow .progress-bar{background-color:rgba(212,175,55,.2)!important}.capibara.c-yellow.dark-theme .progress-bar:after,.capibara.c-yellow.dark-theme .progress-bar:before,.capibara.c-yellow .progress-bar:after,.capibara.c-yellow .progress-bar:before{background-color:#d4af37!important}.capibara.c-yellow.dark-theme select.tabs-select,.capibara.c-yellow select.tabs-select{background-color:rgba(212,175,55,.7)!important;border-color:#d4af37!important}.capibara.c-yellow.dark-theme .time,.capibara.c-yellow .time{border-color:rgba(212,175,55,.6)}.capibara.c-yellow.dark-theme .time .symbol,.capibara.c-yellow .time .symbol{color:#d4af37}.capibara.c-yellow.dark-theme .time input:active,.capibara.c-yellow.dark-theme .time input:focus,.capibara.c-yellow .time input:active,.capibara.c-yellow .time input:focus{border-color:#d4af37;box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow.dark-theme .input-box,.capibara.c-yellow.dark-theme .input-section select.input-select,.capibara.c-yellow .input-box,.capibara.c-yellow .input-section select.input-select{border-color:rgba(212,175,55,.6)}.capibara.c-yellow.dark-theme .input-section select.input-select:active,.capibara.c-yellow.dark-theme .input-section select.input-select:focus,.capibara.c-yellow .input-section select.input-select:active,.capibara.c-yellow .input-section select.input-select:focus{border-color:#d4af37;box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow.dark-theme .input-section .nav-input-file,.capibara.c-yellow.dark-theme .input-section input.nav-input,.capibara.c-yellow .input-section .nav-input-file,.capibara.c-yellow .input-section input.nav-input{border-color:rgba(212,175,55,.6)}.capibara.c-yellow.dark-theme .input-section .nav-input-file:active,.capibara.c-yellow.dark-theme .input-section .nav-input-file:focus,.capibara.c-yellow.dark-theme .input-section input.nav-input:active,.capibara.c-yellow.dark-theme .input-section input.nav-input:focus,.capibara.c-yellow .input-section .nav-input-file:active,.capibara.c-yellow .input-section .nav-input-file:focus,.capibara.c-yellow .input-section input.nav-input:active,.capibara.c-yellow .input-section input.nav-input:focus{border-color:#d4af37;box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-yellow .input-section.msj-input-container textarea.msj{border:2px solid #d4af37}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-yellow .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(212,175,55,.2)}.capibara.c-yellow .cap-btn-raised,.capibara.c-yellow.dark-theme .cap-btn-raised{border-color:#d4af37;background:rgba(212,175,55,.8)}.capibara.c-yellow .cap-btn-outline,.capibara.c-yellow.dark-theme .cap-btn-outline{border-color:#d4af37;color:#d4af37}.capibara.c-yellow .cap-btn-outline.selected,.capibara.c-yellow.dark-theme .cap-btn-outline.selected{background:rgba(212,175,55,.8)}.capibara.c-yellow.dark-theme .select-container .selected-day,.capibara.c-yellow .select-container .selected-day{background:rgba(212,175,55,.3);box-shadow:inset 0 0 10px rgba(212,175,55,.5)}.capibara .c-yellow--background{background:#d4af37!important}.capibara .c-yellow-d--background{background:#9d8022!important}.capibara .c-yellow-l--background{background:#e2c876!important}.capibara .c-yellow--text{color:#d4af37!important}.capibara .c-yellow-d--text{color:#9d8022!important}.capibara .c-yellow-l--text{color:#e2c876!important}.capibara .detail-day .list-detail .item-detail.c-yellow{background:rgba(212,175,55,.2);border:1px solid #d4af37}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon{background:#d4af37}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon.outlined{border:1px solid #d4af37;box-shadow:inset 0 0 0 1px rgba(212,175,55,.7)}.capibara .detail-day .list-detail .item-detail.c-yellow .name{color:#d4af37}.capibara .float-box-container .float-box span.data.c-yellow{--local-color:#d4af37;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-yellow,.capibara .float-box-container .float-box .dot.c-yellow,.capibara .float-box-container .float-box .rowdot--row.c-yellow .rowdot--dot{--local-color:#d4af37}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active{background:rgba(212,175,55,.7);border-color:rgba(212,175,55,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active:hover{background:rgba(212,175,55,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow:hover{background:rgba(212,175,55,.2);border-color:rgba(212,175,55,.9)}.capibara .input-box .mini-input-section--icon.c-yellow{background:#d4af37}.capibara.c-amber:not(.dark-theme){scrollbar-color:#e6b520 transparent}.capibara.c-amber:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6b520}.capibara.c-amber:not(.dark-theme) .header-top{background:#f4efde}.capibara.c-amber:not(.dark-theme) .corner{background:#f4efde;border-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header{background:#f4efde;border-bottom-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f4efde)!important}.capibara.c-amber:not(.dark-theme) nav.right{border-color:#ffdb6d}.capibara.c-amber.dark-theme .header-top,.capibara.c-amber.dark-theme nav.right{border-color:#a07800}.capibara.c-amber.dark-theme .container-tl header,.capibara.c-amber.dark-theme .corner{border-bottom-color:#a07800}.capibara.c-amber.dark-theme ::-moz-selection,.capibara.c-amber ::-moz-selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme ::selection,.capibara.c-amber ::selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar,.capibara.c-amber .progress-bar{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar:after,.capibara.c-amber.dark-theme .progress-bar:before,.capibara.c-amber .progress-bar:after,.capibara.c-amber .progress-bar:before{background-color:#ffc107!important}.capibara.c-amber.dark-theme select.tabs-select,.capibara.c-amber select.tabs-select{background-color:rgba(255,193,7,.7)!important;border-color:#ffc107!important}.capibara.c-amber.dark-theme .time,.capibara.c-amber .time{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .time .symbol,.capibara.c-amber .time .symbol{color:#ffc107}.capibara.c-amber.dark-theme .time input:active,.capibara.c-amber.dark-theme .time input:focus,.capibara.c-amber .time input:active,.capibara.c-amber .time input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-box,.capibara.c-amber.dark-theme .input-section select.input-select,.capibara.c-amber .input-box,.capibara.c-amber .input-section select.input-select{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section select.input-select:active,.capibara.c-amber.dark-theme .input-section select.input-select:focus,.capibara.c-amber .input-section select.input-select:active,.capibara.c-amber .input-section select.input-select:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section .nav-input-file,.capibara.c-amber.dark-theme .input-section input.nav-input,.capibara.c-amber .input-section .nav-input-file,.capibara.c-amber .input-section input.nav-input{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section .nav-input-file:active,.capibara.c-amber.dark-theme .input-section .nav-input-file:focus,.capibara.c-amber.dark-theme .input-section input.nav-input:active,.capibara.c-amber.dark-theme .input-section input.nav-input:focus,.capibara.c-amber .input-section .nav-input-file:active,.capibara.c-amber .input-section .nav-input-file:focus,.capibara.c-amber .input-section input.nav-input:active,.capibara.c-amber .input-section input.nav-input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-amber .input-section.msj-input-container textarea.msj{border:2px solid #ffc107}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-amber .input-section.msj-input-container textarea.msj:active,.capibara.c-amber .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber .cap-btn-raised,.capibara.c-amber.dark-theme .cap-btn-raised{border-color:#ffc107;background:rgba(255,193,7,.8)}.capibara.c-amber .cap-btn-outline,.capibara.c-amber.dark-theme .cap-btn-outline{border-color:#ffc107;color:#ffc107}.capibara.c-amber .cap-btn-outline.selected,.capibara.c-amber.dark-theme .cap-btn-outline.selected{background:rgba(255,193,7,.8)}.capibara.c-amber.dark-theme .select-container .selected-day,.capibara.c-amber .select-container .selected-day{background:rgba(255,193,7,.3);box-shadow:inset 0 0 10px rgba(255,193,7,.5)}.capibara .c-amber--background{background:#ffc107!important}.capibara .c-amber-d--background{background:#ba8b00!important}.capibara .c-amber-l--background{background:#ffd454!important}.capibara .c-amber--text{color:#ffc107!important}.capibara .c-amber-d--text{color:#ba8b00!important}.capibara .c-amber-l--text{color:#ffd454!important}.capibara .detail-day .list-detail .item-detail.c-amber{background:rgba(255,193,7,.2);border:1px solid #ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon{background:#ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon.outlined{border:1px solid #ffc107;box-shadow:inset 0 0 0 1px rgba(255,193,7,.7)}.capibara .detail-day .list-detail .item-detail.c-amber .name{color:#ffc107}.capibara .float-box-container .float-box span.data.c-amber{--local-color:#ffc107;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-amber,.capibara .float-box-container .float-box .dot.c-amber,.capibara .float-box-container .float-box .rowdot--row.c-amber .rowdot--dot{--local-color:#ffc107}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active{background:rgba(255,193,7,.7);border-color:rgba(255,193,7,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active:hover{background:rgba(255,193,7,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber:hover{background:rgba(255,193,7,.2);border-color:rgba(255,193,7,.9)}.capibara .input-box .mini-input-section--icon.c-amber{background:#ffc107}.capibara.c-orange:not(.dark-theme){scrollbar-color:#e6931a transparent}.capibara.c-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6931a}.capibara.c-orange:not(.dark-theme) .header-top{background:#f2e8d9}.capibara.c-orange:not(.dark-theme) .corner{background:#f2e8d9;border-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header{background:#f2e8d9;border-bottom-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f2e8d9)!important}.capibara.c-orange:not(.dark-theme) nav.right{border-color:#ffc166}.capibara.c-orange.dark-theme .header-top,.capibara.c-orange.dark-theme nav.right{border-color:#995b00}.capibara.c-orange.dark-theme .container-tl header,.capibara.c-orange.dark-theme .corner{border-bottom-color:#995b00}.capibara.c-orange.dark-theme ::-moz-selection,.capibara.c-orange ::-moz-selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme ::selection,.capibara.c-orange ::selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar,.capibara.c-orange .progress-bar{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar:after,.capibara.c-orange.dark-theme .progress-bar:before,.capibara.c-orange .progress-bar:after,.capibara.c-orange .progress-bar:before{background-color:#ff9800!important}.capibara.c-orange.dark-theme select.tabs-select,.capibara.c-orange select.tabs-select{background-color:rgba(255,152,0,.7)!important;border-color:#ff9800!important}.capibara.c-orange.dark-theme .time,.capibara.c-orange .time{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .time .symbol,.capibara.c-orange .time .symbol{color:#ff9800}.capibara.c-orange.dark-theme .time input:active,.capibara.c-orange.dark-theme .time input:focus,.capibara.c-orange .time input:active,.capibara.c-orange .time input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-box,.capibara.c-orange.dark-theme .input-section select.input-select,.capibara.c-orange .input-box,.capibara.c-orange .input-section select.input-select{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section select.input-select:active,.capibara.c-orange.dark-theme .input-section select.input-select:focus,.capibara.c-orange .input-section select.input-select:active,.capibara.c-orange .input-section select.input-select:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section .nav-input-file,.capibara.c-orange.dark-theme .input-section input.nav-input,.capibara.c-orange .input-section .nav-input-file,.capibara.c-orange .input-section input.nav-input{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-orange.dark-theme .input-section input.nav-input:active,.capibara.c-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-orange .input-section .nav-input-file:active,.capibara.c-orange .input-section .nav-input-file:focus,.capibara.c-orange .input-section input.nav-input:active,.capibara.c-orange .input-section input.nav-input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-orange .input-section.msj-input-container textarea.msj{border:2px solid #ff9800}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange .cap-btn-raised,.capibara.c-orange.dark-theme .cap-btn-raised{border-color:#ff9800;background:rgba(255,152,0,.8)}.capibara.c-orange .cap-btn-outline,.capibara.c-orange.dark-theme .cap-btn-outline{border-color:#ff9800;color:#ff9800}.capibara.c-orange .cap-btn-outline.selected,.capibara.c-orange.dark-theme .cap-btn-outline.selected{background:rgba(255,152,0,.8)}.capibara.c-orange.dark-theme .select-container .selected-day,.capibara.c-orange .select-container .selected-day{background:rgba(255,152,0,.3);box-shadow:inset 0 0 10px rgba(255,152,0,.5)}.capibara .c-orange--background{background:#ff9800!important}.capibara .c-orange-d--background{background:#b36a00!important}.capibara .c-orange-l--background{background:#ffb74d!important}.capibara .c-orange--text{color:#ff9800!important}.capibara .c-orange-d--text{color:#b36a00!important}.capibara .c-orange-l--text{color:#ffb74d!important}.capibara .detail-day .list-detail .item-detail.c-orange{background:rgba(255,152,0,.2);border:1px solid #ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon{background:#ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon.outlined{border:1px solid #ff9800;box-shadow:inset 0 0 0 1px rgba(255,152,0,.7)}.capibara .detail-day .list-detail .item-detail.c-orange .name{color:#ff9800}.capibara .float-box-container .float-box span.data.c-orange{--local-color:#ff9800;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-orange,.capibara .float-box-container .float-box .dot.c-orange,.capibara .float-box-container .float-box .rowdot--row.c-orange .rowdot--dot{--local-color:#ff9800}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active{background:rgba(255,152,0,.7);border-color:rgba(255,152,0,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active:hover{background:rgba(255,152,0,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange:hover{background:rgba(255,152,0,.2);border-color:rgba(255,152,0,.9)}.capibara .input-box .mini-input-section--icon.c-orange{background:#ff9800}.capibara.c-deep-orange:not(.dark-theme){scrollbar-color:#cd5733 transparent}.capibara.c-deep-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#cd5733}.capibara.c-deep-orange:not(.dark-theme) .header-top{background:#ede1de}.capibara.c-deep-orange:not(.dark-theme) .corner{background:#ede1de;border-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header{background:#ede1de;border-bottom-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ede1de)!important}.capibara.c-deep-orange:not(.dark-theme) nav.right{border-color:#f09275}.capibara.c-deep-orange.dark-theme .header-top,.capibara.c-deep-orange.dark-theme nav.right{border-color:#8a2c0f}.capibara.c-deep-orange.dark-theme .container-tl header,.capibara.c-deep-orange.dark-theme .corner{border-bottom-color:#8a2c0f}.capibara.c-deep-orange.dark-theme ::-moz-selection,.capibara.c-deep-orange ::-moz-selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme ::selection,.capibara.c-deep-orange ::selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar,.capibara.c-deep-orange .progress-bar{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar:after,.capibara.c-deep-orange.dark-theme .progress-bar:before,.capibara.c-deep-orange .progress-bar:after,.capibara.c-deep-orange .progress-bar:before{background-color:#e64a19!important}.capibara.c-deep-orange.dark-theme select.tabs-select,.capibara.c-deep-orange select.tabs-select{background-color:rgba(230,74,25,.7)!important;border-color:#e64a19!important}.capibara.c-deep-orange.dark-theme .time,.capibara.c-deep-orange .time{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .time .symbol,.capibara.c-deep-orange .time .symbol{color:#e64a19}.capibara.c-deep-orange.dark-theme .time input:active,.capibara.c-deep-orange.dark-theme .time input:focus,.capibara.c-deep-orange .time input:active,.capibara.c-deep-orange .time input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-box,.capibara.c-deep-orange.dark-theme .input-section select.input-select,.capibara.c-deep-orange .input-box,.capibara.c-deep-orange .input-section select.input-select{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section select.input-select:active,.capibara.c-deep-orange.dark-theme .input-section select.input-select:focus,.capibara.c-deep-orange .input-section select.input-select:active,.capibara.c-deep-orange .input-section select.input-select:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file,.capibara.c-deep-orange.dark-theme .input-section input.nav-input,.capibara.c-deep-orange .input-section .nav-input-file,.capibara.c-deep-orange .input-section input.nav-input{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:active,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-orange .input-section .nav-input-file:active,.capibara.c-deep-orange .input-section .nav-input-file:focus,.capibara.c-deep-orange .input-section input.nav-input:active,.capibara.c-deep-orange .input-section input.nav-input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj{border:2px solid #e64a19}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange .cap-btn-raised,.capibara.c-deep-orange.dark-theme .cap-btn-raised{border-color:#e64a19;background:rgba(230,74,25,.8)}.capibara.c-deep-orange .cap-btn-outline,.capibara.c-deep-orange.dark-theme .cap-btn-outline{border-color:#e64a19;color:#e64a19}.capibara.c-deep-orange .cap-btn-outline.selected,.capibara.c-deep-orange.dark-theme .cap-btn-outline.selected{background:rgba(230,74,25,.8)}.capibara.c-deep-orange.dark-theme .select-container .selected-day,.capibara.c-deep-orange .select-container .selected-day{background:rgba(230,74,25,.3);box-shadow:inset 0 0 10px rgba(230,74,25,.5)}.capibara .c-deep-orange--background{background:#e64a19!important}.capibara .c-deep-orange-d--background{background:#a13412!important}.capibara .c-deep-orange-l--background{background:#ee805e!important}.capibara .c-deep-orange--text{color:#e64a19!important}.capibara .c-deep-orange-d--text{color:#a13412!important}.capibara .c-deep-orange-l--text{color:#ee805e!important}.capibara .detail-day .list-detail .item-detail.c-deep-orange{background:rgba(230,74,25,.2);border:1px solid #e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon{background:#e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon.outlined{border:1px solid #e64a19;box-shadow:inset 0 0 0 1px rgba(230,74,25,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-orange .name{color:#e64a19}.capibara .float-box-container .float-box span.data.c-deep-orange{--local-color:#e64a19;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-orange,.capibara .float-box-container .float-box .dot.c-deep-orange,.capibara .float-box-container .float-box .rowdot--row.c-deep-orange .rowdot--dot{--local-color:#e64a19}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active{background:rgba(230,74,25,.7);border-color:rgba(230,74,25,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active:hover{background:rgba(230,74,25,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange:hover{background:rgba(230,74,25,.2);border-color:rgba(230,74,25,.9)}.capibara .input-box .mini-input-section--icon.c-deep-orange{background:#e64a19}.capibara.c-brown:not(.dark-theme){scrollbar-color:#665e5b transparent}.capibara.c-brown:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#665e5b}.capibara.c-brown:not(.dark-theme) .header-top{background:#c7c7c7}.capibara.c-brown:not(.dark-theme) .corner{background:#c7c7c7;border-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header{background:#c7c7c7;border-bottom-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#c7c7c7)!important}.capibara.c-brown:not(.dark-theme) nav.right{border-color:#af8778}.capibara.c-brown.dark-theme .header-top,.capibara.c-brown.dark-theme nav.right{border-color:#392822}.capibara.c-brown.dark-theme .container-tl header,.capibara.c-brown.dark-theme .corner{border-bottom-color:#392822}.capibara.c-brown.dark-theme ::-moz-selection,.capibara.c-brown ::-moz-selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme ::selection,.capibara.c-brown ::selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar,.capibara.c-brown .progress-bar{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar:after,.capibara.c-brown.dark-theme .progress-bar:before,.capibara.c-brown .progress-bar:after,.capibara.c-brown .progress-bar:before{background-color:#795548!important}.capibara.c-brown.dark-theme select.tabs-select,.capibara.c-brown select.tabs-select{background-color:rgba(121,85,72,.7)!important;border-color:#795548!important}.capibara.c-brown.dark-theme .time,.capibara.c-brown .time{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .time .symbol,.capibara.c-brown .time .symbol{color:#795548}.capibara.c-brown.dark-theme .time input:active,.capibara.c-brown.dark-theme .time input:focus,.capibara.c-brown .time input:active,.capibara.c-brown .time input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-box,.capibara.c-brown.dark-theme .input-section select.input-select,.capibara.c-brown .input-box,.capibara.c-brown .input-section select.input-select{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section select.input-select:active,.capibara.c-brown.dark-theme .input-section select.input-select:focus,.capibara.c-brown .input-section select.input-select:active,.capibara.c-brown .input-section select.input-select:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section .nav-input-file,.capibara.c-brown.dark-theme .input-section input.nav-input,.capibara.c-brown .input-section .nav-input-file,.capibara.c-brown .input-section input.nav-input{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section .nav-input-file:active,.capibara.c-brown.dark-theme .input-section .nav-input-file:focus,.capibara.c-brown.dark-theme .input-section input.nav-input:active,.capibara.c-brown.dark-theme .input-section input.nav-input:focus,.capibara.c-brown .input-section .nav-input-file:active,.capibara.c-brown .input-section .nav-input-file:focus,.capibara.c-brown .input-section input.nav-input:active,.capibara.c-brown .input-section input.nav-input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-brown .input-section.msj-input-container textarea.msj{border:2px solid #795548}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-brown .input-section.msj-input-container textarea.msj:active,.capibara.c-brown .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown .cap-btn-raised,.capibara.c-brown.dark-theme .cap-btn-raised{border-color:#795548;background:rgba(121,85,72,.8)}.capibara.c-brown .cap-btn-outline,.capibara.c-brown.dark-theme .cap-btn-outline{border-color:#795548;color:#795548}.capibara.c-brown .cap-btn-outline.selected,.capibara.c-brown.dark-theme .cap-btn-outline.selected{background:rgba(121,85,72,.8)}.capibara.c-brown.dark-theme .select-container .selected-day,.capibara.c-brown .select-container .selected-day{background:rgba(121,85,72,.3);box-shadow:inset 0 0 10px rgba(121,85,72,.5)}.capibara .c-brown--background{background:#795548!important}.capibara .c-brown-d--background{background:#49332b!important}.capibara .c-brown-l--background{background:#a57868!important}.capibara .c-brown--text{color:#795548!important}.capibara .c-brown-d--text{color:#49332b!important}.capibara .c-brown-l--text{color:#a57868!important}.capibara .detail-day .list-detail .item-detail.c-brown{background:rgba(121,85,72,.2);border:1px solid #795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon{background:#795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon.outlined{border:1px solid #795548;box-shadow:inset 0 0 0 1px rgba(121,85,72,.7)}.capibara .detail-day .list-detail .item-detail.c-brown .name{color:#795548}.capibara .float-box-container .float-box span.data.c-brown{--local-color:#795548;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-brown,.capibara .float-box-container .float-box .dot.c-brown,.capibara .float-box-container .float-box .rowdot--row.c-brown .rowdot--dot{--local-color:#795548}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active{background:rgba(121,85,72,.7);border-color:rgba(121,85,72,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active:hover{background:rgba(121,85,72,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown:hover{background:rgba(121,85,72,.2);border-color:rgba(121,85,72,.9)}.capibara .input-box .mini-input-section--icon.c-brown{background:#795548}.capibara.c-blue_grey:not(.dark-theme){scrollbar-color:#767676 transparent}.capibara.c-blue_grey:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#767676}.capibara.c-blue_grey:not(.dark-theme) .header-top{background:#dcdcdc}.capibara.c-blue_grey:not(.dark-theme) .corner{background:#dcdcdc;border-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header{background:#dcdcdc;border-bottom-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dcdcdc)!important}.capibara.c-blue_grey:not(.dark-theme) nav.right{border-color:#99aeb8}.capibara.c-blue_grey.dark-theme .header-top,.capibara.c-blue_grey.dark-theme nav.right{border-color:#36474f}.capibara.c-blue_grey.dark-theme .container-tl header,.capibara.c-blue_grey.dark-theme .corner{border-bottom-color:#36474f}.capibara.c-blue_grey.dark-theme ::-moz-selection,.capibara.c-blue_grey ::-moz-selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme ::selection,.capibara.c-blue_grey ::selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar,.capibara.c-blue_grey .progress-bar{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar:after,.capibara.c-blue_grey.dark-theme .progress-bar:before,.capibara.c-blue_grey .progress-bar:after,.capibara.c-blue_grey .progress-bar:before{background-color:#607d8b!important}.capibara.c-blue_grey.dark-theme select.tabs-select,.capibara.c-blue_grey select.tabs-select{background-color:rgba(96,125,139,.7)!important;border-color:#607d8b!important}.capibara.c-blue_grey.dark-theme .time,.capibara.c-blue_grey .time{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .time .symbol,.capibara.c-blue_grey .time .symbol{color:#607d8b}.capibara.c-blue_grey.dark-theme .time input:active,.capibara.c-blue_grey.dark-theme .time input:focus,.capibara.c-blue_grey .time input:active,.capibara.c-blue_grey .time input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-box,.capibara.c-blue_grey.dark-theme .input-section select.input-select,.capibara.c-blue_grey .input-box,.capibara.c-blue_grey .input-section select.input-select{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section select.input-select:active,.capibara.c-blue_grey.dark-theme .input-section select.input-select:focus,.capibara.c-blue_grey .input-section select.input-select:active,.capibara.c-blue_grey .input-section select.input-select:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file,.capibara.c-blue_grey.dark-theme .input-section input.nav-input,.capibara.c-blue_grey .input-section .nav-input-file,.capibara.c-blue_grey .input-section input.nav-input{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:active,.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:active,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:focus,.capibara.c-blue_grey .input-section .nav-input-file:active,.capibara.c-blue_grey .input-section .nav-input-file:focus,.capibara.c-blue_grey .input-section input.nav-input:active,.capibara.c-blue_grey .input-section input.nav-input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj{border:2px solid #607d8b}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey .cap-btn-raised,.capibara.c-blue_grey.dark-theme .cap-btn-raised{border-color:#607d8b;background:rgba(96,125,139,.8)}.capibara.c-blue_grey .cap-btn-outline,.capibara.c-blue_grey.dark-theme .cap-btn-outline{border-color:#607d8b;color:#607d8b}.capibara.c-blue_grey .cap-btn-outline.selected,.capibara.c-blue_grey.dark-theme .cap-btn-outline.selected{background:rgba(96,125,139,.8)}.capibara.c-blue_grey.dark-theme .select-container .selected-day,.capibara.c-blue_grey .select-container .selected-day{background:rgba(96,125,139,.3);box-shadow:inset 0 0 10px rgba(96,125,139,.5)}.capibara .c-blue_grey--background{background:#607d8b!important}.capibara .c-blue_grey-d--background{background:#41545e!important}.capibara .c-blue_grey-l--background{background:#8aa2ae!important}.capibara .c-blue_grey--text{color:#607d8b!important}.capibara .c-blue_grey-d--text{color:#41545e!important}.capibara .c-blue_grey-l--text{color:#8aa2ae!important}.capibara .detail-day .list-detail .item-detail.c-blue_grey{background:rgba(96,125,139,.2);border:1px solid #607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon{background:#607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon.outlined{border:1px solid #607d8b;box-shadow:inset 0 0 0 1px rgba(96,125,139,.7)}.capibara .detail-day .list-detail .item-detail.c-blue_grey .name{color:#607d8b}.capibara .float-box-container .float-box span.data.c-blue_grey{--local-color:#607d8b;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue_grey,.capibara .float-box-container .float-box .dot.c-blue_grey,.capibara .float-box-container .float-box .rowdot--row.c-blue_grey .rowdot--dot{--local-color:#607d8b}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active{background:rgba(96,125,139,.7);border-color:rgba(96,125,139,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active:hover{background:rgba(96,125,139,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey:hover{background:rgba(96,125,139,.2);border-color:rgba(96,125,139,.9)}.capibara .input-box .mini-input-section--icon.c-blue_grey{background:#607d8b}.capibara *,.capibara :after,.capibara :before{box-sizing:border-box}.capibara input{outline:none}.capibara input[type=number]{-moz-appearance:textfield}.capibara input[type=number]::-webkit-inner-spin-button,.capibara input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.capibara input[type=number]::-moz-placeholder{opacity:1}.capibara input[type=number]:-ms-input-placeholder{opacity:1}.capibara input[type=number]::placeholder{opacity:1}.capibara.dark-theme .hide-dark,.capibara:not(.dark-theme) .hide-light{display:none!important}.capibara .truncate{width:100%;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.capibara .hide{display:none!important}.capibara .text-title{font-size:1.25em;font-weight:700;margin:.5em .3em}.capibara .text-subtitle{font-size:.875em;font-weight:700;margin:.5em .3em;flex:0 0 auto}.capibara .text-hint{font-size:.75em;margin:.3em;text-align:left;align-self:flex-start}.capibara .text-subtitle-2{font-size:.75em;margin:.5em .3em;flex:0 0 auto}.capibara .d-inline-block{display:inline-block}.capibara .d-block{display:block}.capibara .d-flex{display:flex;flex-direction:column;align-items:center}@media screen and (min-width:960px){.capibara:not(.force-mobile) .c-d-desktop-none{display:none!important}.capibara:not(.force-mobile) .c-d-desktop-inline-block{display:inline-block!important}.capibara:not(.force-mobile) .c-d-desktop-block{display:block!important}.capibara:not(.force-mobile) .c-d-desktop-flex{display:flex!important}}@media screen and (max-width:959px){.capibara .c-d-mobile-none{display:none!important}.capibara .c-d-mobile-flex{display:flex!important}.capibara .c-d-mobile-block{display:block!important}.capibara .c-d-mobile-inline-block{display:inline-block!important}}.capibara.force-mobile .c-d-mobile-none{display:none!important}.capibara.force-mobile .c-d-mobile-flex{display:flex!important}.capibara.force-mobile .c-d-mobile-block{display:block!important}.capibara.force-mobile .c-d-mobile-inline-block{display:inline-block!important}.capibara.force-mobile .header-top .tabs-container{display:none!important}.capibara{scrollbar-width:auto}.capibara ::-webkit-scrollbar{width:12px;height:12px;opacity:.5}.capibara ::-webkit-scrollbar-corner,.capibara ::-webkit-scrollbar-track{background:transparent}.capibara ::-webkit-scrollbar-thumb{border-radius:5px;background:grey}.capibara.dark-theme ::-webkit-scrollbar-corner,.capibara.dark-theme ::-webkit-scrollbar-track{background:transparent}.capibara.dark-theme ::-webkit-scrollbar-thumb{background:#bdbdbd}.capibara{position:relative;font-family:Roboto,sans-serif;height:inherit;max-height:inherit;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;font-size:var(--font-size)}.capibara pre{font-family:Roboto,sans-serif!important}.capibara{color:#37474f;background:#f5f5f5}.capibara.dark-theme{color:#f0f0f0;background:#222837}.capibara .container-tl{width:100%;height:calc(100% - var(--header-top-height));max-height:calc(100% - var(--header-top-height));position:relative;overflow:scroll;margin:0;will-change:scroll-position}.capibara.extended-right .container-tl{width:calc(100% - var(--nav-right-width))}.capibara .container-tl{background:#f5f5f5}.capibara.dark-theme .container-tl{background:#222837}.capibara .container-tl .today-line{width:0;position:absolute}.capibara .container-tl .today-line.disable-line,.capibara .container-tl .today-line.disable-line:after{display:none!important}.capibara .container-tl .today-line:after{margin-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width) + 1px);position:absolute;display:block;left:0;top:0;content:\\\"\\\";width:2px;height:100%;background:rgba(183,28,28,.4)}.capibara .container-tl.header-extended .container-tl .today-line:after{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .corner{position:absolute;top:var(--header-top-height);z-index:4;height:var(--header-height);border:solid rgba(0,0,0,.4);border-width:0 0 2px;padding-left:8px}.capibara .corner:not(.right){left:0;border-right-width:1px;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .corner.right{right:0;width:var(--nav-right-width);display:none}.capibara .corner>div:not([class]){width:inherit;height:inherit}.capibara .corner .btn-container{padding-top:.5em}.capibara .corner .btn-container .corner-btn{font-size:.825em;margin:0 4px;padding:4px 8px}.capibara .corner .corner-title{height:inherit;display:block;text-align:left;position:relative}.capibara .corner .corner-title span.bottom-text{position:absolute;left:0;bottom:8px}@media screen and (max-width:959px){.capibara .corner .corner-title{font-size:.75em}}.capibara .corner .initial-corner{position:absolute;left:var(--nav-width);top:0;width:var(--initial-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .initial-corner .initial-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .initial-corner .initial-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .initial-corner .initial-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .extend-corner{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;width:var(--ex-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .extend-corner .ex-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .extend-corner .ex-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .extend-corner .ex-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .cap-btn-nav-corner{position:absolute;right:0;top:0;width:var(--btn-nav-width);height:var(--header-height);min-width:100px;padding-top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles{text-align:right;display:flex;flex-direction:column;position:absolute;right:0;top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container{position:relative;border-radius:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:none}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container.input-title--accent .input-title{color:#fff;background:grey}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container span.average{font-weight:700;margin-right:4px;padding:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container .input-title{height:calc(var(--header-input-height) + 3px);line-height:calc(var(--header-input-height) + 2px);padding-right:8px;display:inline-block;font-size:.75em}.capibara.extended-right .corner.right{display:block}.capibara.header-extended .corner,.capibara.header-extended .corner .cap-btn-nav-corner,.capibara.header-extended .corner .extend-corner,.capibara.header-extended .corner .initial-corner{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:unset}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .average-box{visibility:visible}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .input-title{visibility:visible;height:auto}.capibara .corner{background:#f1fffe}.capibara.dark-theme .corner{background:#313b50;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .corner .input-titles .input-title-container .input-title{color:hsla(0,0%,100%,.8)!important}.capibara .header-top{position:relative;width:100%;height:var(--header-top-height);padding:0 .5em;display:flex;flex-flow:row wrap;z-index:5}.capibara .header-top .spacer{flex:1 0 auto}.capibara .header-top .tabs-container{display:flex;border-right:1px solid hsla(0,0%,43.5%,.3);margin-right:.5em}.capibara .header-top .tabs-container:not(:empty){padding:0}.capibara .header-top .tabs-container button.tab{cursor:pointer;padding:.25em 1em;font-weight:700;border:1px solid transparent;margin:.5em .5em 0 0;border-radius:30px;transition:background .2s ease;background:transparent}.capibara .header-top .tabs-container button.tab:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .header-top .tabs-container button.tab.disabled{color:grey}.capibara .header-top .tabs-container button.tab:hover{border-color:grey}.capibara .header-top .legends-container{display:flex}.capibara .header-top .legends-container .legend{display:flex;flex-direction:row;margin-right:1em;cursor:pointer;padding:.8em .5em .5em 0}.capibara .header-top .legends-container .legend:not(.active){opacity:.5}.capibara .header-top .legends-container .legend:not(.active) .icon-legend{background:grey!important}.capibara .header-top .legends-container .legend .icon-legend{width:.825em;height:.825em;margin:2px .5em 2px 0;background:grey;box-shadow:0 1px 2px rgba(0,0,0,.4);display:inline-block;border-radius:1px;border:1px solid rgba(0,0,0,.4)}.capibara .header-top .legends-container .legend .icon-legend.circle{border-radius:50%}.capibara .header-top .legends-container .legend:hover span{text-decoration:underline}.capibara .header-top .legends-container.force-mobile-style{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container.force-mobile-style .legend{font-size:16px;padding:.5em}@media screen and (max-width:959px){.capibara .header-top .legends-container{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container .legend{font-size:16px;padding:.5em}}.capibara .header-top{background:#f1fffe}.capibara .header-top .tabs-container .tab{color:#313b50}.capibara .header-top .tabs-container .tab.disabled{color:rgba(49,59,80,.5)}.capibara.dark-theme .header-top{background:#313b50}.capibara.dark-theme .header-top .tabs-container .tab{color:hsla(0,0%,100%,.8)}.capibara.dark-theme .header-top .tabs-container .tab.disabled{color:hsla(0,0%,100%,.4)}.capibara .corner-footer{position:-webkit-sticky;position:sticky;left:0;bottom:0;z-index:3;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:var(--item-height);margin-bottom:calc(var(--item-height)*-1);box-sizing:border-box}.capibara .corner-footer .corner-title{line-height:30px;height:inherit;display:block;text-align:left;box-sizing:border-box;position:relative;font-weight:700;padding:4px 8px}.capibara .corner-footer{background:#fff;color:#fff;border-color:rgba(0,0,0,.12)}.capibara.dark-theme .corner-footer{background:#313b50;color:#f0f0f0;border-color:rgba(64,78,105,.6)}.capibara nav.right{position:absolute;right:0;top:calc(var(--header-height) + var(--header-top-height));height:calc(100% - var(--header-height) - var(--header-top-height));overflow-y:scroll;overflow-x:hidden;z-index:5;display:none;border-left:1px solid red}.capibara nav.right,.capibara nav.right .child-nav-item,.capibara nav.right .nav-item{width:var(--nav-right-width)}.capibara nav.right .nav-input-container{text-align:center}.capibara nav.right .nav-input-container .button-section{padding-bottom:.75em;padding-top:.75em;position:-webkit-sticky;position:sticky;bottom:0}.capibara nav.left{min-height:calc(100% - var(--header-height));position:-webkit-sticky;position:sticky;left:0;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:auto;z-index:2;border-right:1px solid #b0bec5;overflow:visible;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara nav.left .child-nav-item,.capibara nav.left .nav-item{width:var(--nav-width)}.capibara nav.left .detail-nav-item{min-width:250px;max-width:500px;width:-webkit-max-content;width:-moz-max-content;width:max-content;min-height:70px;position:absolute;left:3rem;top:0;border:1px solid grey;z-index:4;border-radius:5px;padding:16px;transition:all .3s ease;flex-flow:column nowrap;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);transform:translateY(calc(.5rem + var(--item-height)))}.capibara nav.left .detail-nav-item.to-bottom{transform:translateY(calc(-100% - .5rem))}.capibara nav.left .detail-nav-item .header-detail .detail-title{font-size:1.125em;font-weight:700;margin-bottom:8px;max-width:100%;width:100%;padding-right:80px}.capibara nav.left .detail-nav-item .header-detail .detail-subtitle{font-size:.875;margin-bottom:8px}.capibara nav.left .detail-nav-item .header-detail .header-chip{position:absolute;right:16px;top:16px;padding:2px 8px;border:3px solid grey;border-radius:5px}.capibara nav.left .detail-nav-item .detail-container>div{margin:6px 0}.capibara nav.left .initial-nav-list{width:var(--initial-nav-width);position:absolute;left:var(--nav-width);top:0;overflow:hidden;display:block}.capibara nav.left .initial-nav-list .child-initial-nav-item,.capibara nav.left .initial-nav-list .initial-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:34px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-title,.capibara nav.left .initial-nav-list .initial-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col,.capibara nav.left .initial-nav-list .initial-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input{padding:0}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>.hour-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>.hour-input{font-size:.875em;width:calc(100% - 8px);border:1px solid grey;border-radius:3px;height:24px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:focus,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .extend-nav-list{width:var(--ex-nav-width);position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;overflow:hidden;display:block}.capibara nav.left .extend-nav-list .child-ex-nav-item,.capibara nav.left .extend-nav-list .ex-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:1.75rem}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-title,.capibara nav.left .extend-nav-list .ex-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col,.capibara nav.left .extend-nav-list .ex-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input{padding:0}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:focus,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .cap-btn-nav-list{left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width));width:var(--btn-nav-width);position:absolute;top:0;overflow:hidden}.capibara nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content{height:var(--item-height);width:inherit;padding:4px 6px;border-bottom:1px solid #b0bec5;text-align:right}.capibara nav.left .nav-item-total-footer{padding-top:3px}.capibara nav .cap-btn-nav-item.parent,.capibara nav .ex-nav-item.parent,.capibara nav .initial-nav-item.parent,.capibara nav .nav-item-container.parent{background:rgba(25,118,210,.1)}.capibara nav .cap-btn-nav-item.parent>.item-title,.capibara nav .ex-nav-item.parent>.item-title,.capibara nav .initial-nav-item.parent>.item-title,.capibara nav .nav-item-container.parent>.item-title{max-width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 60px);width:auto}.capibara nav .nav-item-list .child-nav-item,.capibara nav .nav-item-list .nav-item{min-height:var(--item-height);box-sizing:border-box;position:relative}.capibara nav .nav-item-list .child-nav-item .nav-item-container,.capibara nav .nav-item-list .nav-item .nav-item-container{display:flex;border-bottom:1px solid #b0bec5;height:var(--item-height)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{transition:all .5s ease;background:transparent;border:none;width:34px;flex:0 0 34px;font-size:1.5em;text-align:center;cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon:focus,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{flex:0 0 34px;font-size:1.125em;vertical-align:middle;text-align:center;line-height:40px;margin-top:12px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon path,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon path{width:20px;height:20px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title{flex:1 1 auto;display:grid;font-size:1em;line-height:34px;padding:4px 8px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.full-width,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.full-width{flex:1 0 auto;display:flex;z-index:2;min-width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 40px);width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 40px)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable{cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable:hover{background:hsla(0,0%,39.2%,.2)!important;text-decoration:underline}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.hoverable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.hoverable:hover{background:hsla(0,0%,39.2%,.2)!important}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .item-title-content,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .item-title-content{flex:1 1 auto}@media screen and (max-width:959px){.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.click-label-to-detail .item-title-content,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.click-label-to-detail .item-title-content{text-decoration:underline!important}}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn-container,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn-container{flex:0 0 auto;width:auto;text-align:right}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn{margin-left:2rem;height:24px;line-height:1rem;background:transparent;border:1px solid;color:currentColor;font-size:.875em;padding:4px 8px;border-radius:3px;cursor:pointer;z-index:10}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn:hover{background:hsla(0,0%,39.2%,.2)!important}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon{margin-left:.5rem;padding:2px 6px;display:inline-flex;align-items:center;justify-content:center}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon,.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon{display:inline-flex}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon svg,.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon svg,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .close-icon svg,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title .detail-btn.detail-btn-icon .info-outline-icon svg{width:18px;height:18px}.capibara.force-mobile nav .nav-item-list .nav-item .nav-item-container .item-title.click-label-to-detail .item-title-content{text-decoration:underline}.capibara nav .multibuttons-btn{background:transparent;border:none;color:#999;font-size:1.5em;cursor:pointer;min-width:38px;max-height:38px;display:flex;flex-direction:row;align-items:center;justify-content:center}.capibara nav .multibuttons-btn:hover{background:hsla(0,0%,39.2%,.2)}.capibara.extended-right nav.right{display:block}.capibara.header-extended nav.left{min-height:calc(100% - var(--header-height) + var(--ex-header-height))}.capibara.header-extended nav.right{top:calc(var(--header-height) + var(--header-top-height) + var(--ex-header-height));height:calc(100% - var(--header-height) - var(--header-top-height) - var(--ex-header-height))}.capibara nav.left,.capibara nav.right,.capibara nav.right .button-section{background:#fafafa}.capibara nav.left .detail-nav-item{border-color:rgba(0,0,0,.2);background:#fff}.capibara nav.left .detail-nav-item .header-chip.red-light{border-color:#f84747}.capibara nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fdd835}.capibara nav.left .detail-nav-item .header-chip.green-light{border-color:#38993d}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#37474f}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:rgba(55,71,79,.2)}.capibara.dark-theme nav.right,.capibara.dark-theme nav.right .button-section{background:#222837}.capibara.dark-theme nav.left{background:#222837;border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .detail-nav-item{border-color:#404e69;background:#222837}.capibara.dark-theme nav.left .detail-nav-item .header-chip{color:#f0f0f0}.capibara.dark-theme nav.left .detail-nav-item .header-chip.red-light{border-color:#aa1a1a}.capibara.dark-theme nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fbcd00}.capibara.dark-theme nav.left .detail-nav-item .header-chip.green-light{border-color:#388e3c}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input{background:#404e69;color:#f0f0f0}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:focus{background:hsla(0,0%,100%,.2)}.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#f0f0f0}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:hsla(0,0%,94.1%,.2)}.capibara .container-tl header{height:var(--header-height);width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;top:0;min-width:100%;position:-webkit-sticky;position:sticky;z-index:3;border-bottom:2px solid grey;box-sizing:border-box;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara .container-tl header .header-container-extended{height:auto;position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;box-sizing:border-box;display:flex;flex-direction:column}.capibara .container-tl header .header-container-extended .input-list{padding:1px 0;flex:0 0 auto;display:flex;flex-direction:row}.capibara .container-tl header .header-container-extended .input-list:not(.persistent){display:none}.capibara .container-tl header .header-container-extended .input-list>div{width:var(--day-width)}.capibara .container-tl header .header-container-extended .input-list>div>span{display:block;width:inherit;line-height:var(--header-input-height);height:var(--header-input-height);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input{width:inherit;height:var(--header-input-height);border:1px solid grey;border-left-width:0;border-radius:0;background:hsla(0,0%,100%,.5);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.8)}.capibara .container-tl header .header-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;display:flex;height:var(--header-labels-height)}.capibara .container-tl header .header-container .header-item{padding:6px 8px;min-width:var(--item-min-width);height:var(--header-height);text-align:center;box-sizing:border-box;position:relative;border-left:1px solid rgba(0,0,0,.1)}.capibara .container-tl header .header-container .header-item span.bottom-text{position:absolute;left:0;bottom:8px;width:100%}.capibara .container-tl header .agno-calendario{display:inline-block;width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .agno{position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));display:inline-block;padding-left:8px;padding-right:32px;font-size:.75em;margin-top:4px}.capibara .container-tl header .agno-calendario .meses{display:block;display:flex}.capibara .container-tl header .agno-calendario .mes-calendario{display:inline-block;min-width:var(--day-width)}.capibara .container-tl header .agno-calendario .mes-calendario .mes{display:inline-block;position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--btn-nav-width));padding-left:.5em;padding-right:2em;font-size:.875em;margin-top:6px}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced{width:var(--day-width);max-width:var(--day-width);overflow:hidden}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-2{width:calc(var(--day-width)*2);max-width:calc(var(--day-width)*2)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-3{width:calc(var(--day-width)*3);max-width:calc(var(--day-width)*3)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-4{width:calc(var(--day-width)*4);max-width:calc(var(--day-width)*4)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced .mes-label{width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{content:\\\"\\\";background:linear-gradient(90deg,transparent,red);position:absolute;right:0;top:0;height:100%;width:calc(var(--day-width)/2)}.capibara .container-tl header .agno-calendario .mes-calendario .dias{display:flex;margin-top:5px}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{width:var(--day-width);height:var(--header-day-height);vertical-align:bottom;font-size:.875em;border-right:1px solid rgba(0,0,0,.1);box-sizing:border-box;padding:4px 6px;text-align:center;position:relative}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable{cursor:pointer}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.has-alert:after{content:\\\"\\\";display:block;position:absolute;width:0;height:0;right:0;top:0;border-color:red red transparent transparent;border-style:solid;border-width:6px;z-index:1}.capibara.header-extended .container-tl header{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .container-tl header .header-container-extended .input-list:not(.persistent){display:flex}.capibara .container-tl header{background:#f1fffe;color:#37474f}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f1fffe)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:rgba(0,0,0,.1);color:#263238}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(229,57,53,.9);color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:green;color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara .container-tl header .header-container-extended .input-list .dia-input input,.capibara .container-tl header .header-container-extended .input-list div>span{color:#313b50}.capibara.dark-theme .container-tl header{background:#313b50;color:#f0f0f0;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#313b50)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:#222837;color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(183,28,28,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:rgba(56,142,60,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara.dark-theme .container-tl header .header-container-extended .input-list div>span{color:hsla(0,0%,100%,.8)!important}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input{background:rgba(64,78,105,.6);color:hsla(0,0%,100%,.8)!important;border-color:#313b50}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.2)}.capibara .container-tl .plot-vertical-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-vertical-container .plot-vertical{background:rgba(0,0,0,.3);width:var(--day-width);height:calc(100vh - var(--header-height) - var(--header-top-height));position:absolute;top:0;left:0}.capibara .container-tl .plot-vertical-container .plot-vertical.rain{background:repeating-linear-gradient(53deg,rgba(3,155,229,.2),rgba(3,155,229,.2) 5px,transparent 0,transparent 12px)}.capibara .container-tl .plot-horizontal-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-horizontal-container .plot-horizontal{background:rgba(0,0,0,.3);width:100vw;height:var(--item-height);position:absolute;top:0;left:0}.capibara .container-tl .plot-horizontal-container .plot-horizontal.plot-parent{background:rgba(25,118,210,.1)}.capibara .container-tl.extended-right .container-tl .plot-container .plot-vertical{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .container-tl footer{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;bottom:0;min-width:100%;height:var(--item-height);position:-webkit-sticky;position:sticky;z-index:2;box-sizing:border-box}.capibara .container-tl footer .footer-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));box-sizing:border-box;min-width:100%;display:flex}.capibara .container-tl footer .footer-container .footer-item{padding:10px 2px;width:var(--day-width);cursor:default;border-left:1px solid rgba(0,0,0,.1);box-sizing:border-box;height:var(--item-height);text-align:center}.capibara .container-tl footer{background:#fff;color:#fff}.capibara .container-tl.dark-theme footer{background:#313b50;color:#f0f0f0}.capibara.has-mobile-footer{display:flex;flex-direction:column}.capibara.has-mobile-footer .container-tl{flex:1;min-height:0;margin-bottom:var(--mobile-footer-height)}.capibara .mobile-footer{position:fixed;bottom:0;z-index:2;width:100%;flex-shrink:0;height:var(--mobile-footer-height);min-height:var(--mobile-footer-height);padding:.5em 1em;display:flex;align-items:center;justify-content:space-between;gap:.5em;box-sizing:border-box}.capibara .mobile-footer .mobile-footer-content{display:flex;align-items:center;gap:.5em;flex:1}.capibara .mobile-footer .mobile-footer-buttons{display:flex;gap:.5em;align-items:center;margin-left:auto}@media (min-width:768px){.capibara .mobile-footer .mobile-footer-buttons{margin-left:0}}.capibara .mobile-footer .mobile-footer-select-toggle{display:inline-flex;align-items:center;gap:.5em;width:auto;min-width:auto;padding:8px;border-radius:4px;margin:0;background:hsla(0,0%,100%,.35);border:none}.capibara .mobile-footer .mobile-footer-select-toggle .mobile-footer-select-count,.capibara .mobile-footer .mobile-footer-select-toggle .mobile-footer-select-label{font-size:.875em;white-space:nowrap}.capibara .mobile-footer .mobile-footer-btn,.capibara .mobile-footer .mobile-footer-cancel{flex-shrink:0;border:none}.capibara .mobile-footer .mobile-footer-btn-hidden{display:none!important}.capibara .mobile-footer{background:#fff;color:#fff;border-top:1px solid rgba(0,0,0,.12)}.capibara .mobile-footer .mobile-footer-select-toggle{background:#1e79d3!important;border:none!important;color:#fff!important}.capibara .mobile-footer .mobile-footer-select-toggle svg{fill:#fff}.capibara.dark-theme .mobile-footer{background:#313b50;color:#f0f0f0;border-top:1px solid rgba(64,78,105,.6)}.capibara.dark-theme .mobile-footer .mobile-footer-select-toggle{background:#1e79d3!important;color:#fff!important}.capibara.dark-theme .mobile-footer .mobile-footer-btn,.capibara.dark-theme .mobile-footer .mobile-footer-cancel{border:none;color:#fff}.capibara.dark-theme .mobile-footer .mobile-footer-btn svg,.capibara.dark-theme .mobile-footer .mobile-footer-cancel svg{fill:#fff}.capibara.dark-theme .mobile-footer .mobile-footer-select-toggle{background:#388e3c!important;border:none!important;color:#fff}.capibara.dark-theme .mobile-footer .mobile-footer-select-toggle svg{fill:#fff}.capibara .container-tl .table{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));top:var(--header-height);width:calc(100% - var(--nav-width) - var(--initial-nav-width) - var(--ex-nav-width) - var(--btn-nav-width));max-height:calc(100% - var(--header-height));height:calc(100% - var(--header-height));margin-top:-1px}.capibara .container-tl .table .day-mouse-over{position:absolute;left:0;top:0;width:var(--day-width);height:var(--item-height);border:3px solid rgba(245,124,0,.5);box-shadow:0 0 2px #f57c00,inset 0 0 3px #f57c00;transition:transform .1s ease;overflow:visible;will-change:transform}.capibara .container-tl .table .day-mouse-over:after,.capibara .container-tl .table .day-mouse-over:before{position:absolute;background:rgba(245,124,0,.1);content:\\\"\\\";display:block}.capibara .container-tl .table .day-mouse-over:after{width:var(--day-width);height:100vh;right:-4px;bottom:calc(var(--item-height) - 2px)}.capibara .container-tl .table .day-mouse-over:before{height:var(--item-height);width:100vw;right:calc(var(--day-width) - 2px);bottom:-4px}.capibara .container-tl .table .background-grid{width:calc(var(--day-width)*20);height:calc(var(--item-height)*20);position:absolute;left:0;top:1px;background-repeat:repeat;background-size:var(--day-width) var(--item-height),calc(var(--day-width)*7) var(--item-height),calc(var(--day-width)*7) var(--item-height);background-image:linear-gradient(90deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(0deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(90deg,transparent calc(var(--day-width)*5),rgba(80,80,80,.1) 0);background-position:0 0,0 0,0 0}.capibara .container-tl .table .draw-box{position:relative}.capibara .container-tl .table .draw-box canvas{position:absolute;left:0;top:0}.capibara.header-extended .container-tl .table{top:calc(var(--header-height) + var(--ex-header-height))}.capibara .select-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .select-container .selected-day{--selected-day-pulse-color:rgba(200,85,57,0.6);--selected-day-pulse-color-mid:rgba(200,85,57,0.75);--selected-day-pulse-color-strong:rgba(200,85,57,0.9);--selected-day-pulse-glow:rgba(200,85,57,0.35);--selected-day-pulse-glow-mid:rgba(200,85,57,0.18);--selected-day-pulse-inset:hsla(0,0%,74.1%,0.8);width:var(--day-width);height:var(--item-height);position:absolute;background:hsla(0,0%,74.1%,.4);box-shadow:inset 0 0 5px var(--selected-day-pulse-inset);border:2px solid var(--selected-day-pulse-color);-webkit-animation:pulseSelectedDay 1s ease-in-out infinite;animation:pulseSelectedDay 1s ease-in-out infinite}.capibara .select-container .selected-day[cap-badge]:after{content:attr(cap-badge);display:block;position:absolute;right:-3px;top:-3px;background:#1565c0;font-size:.75em;color:#fff;width:1.5em;height:1.5em;border-radius:50%;z-index:2;text-align:center;font-weight:700;padding:2px;box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara.dark-theme .selected-day{--selected-day-pulse-color:rgba(0,255,34,0.5);--selected-day-pulse-color-mid:rgba(0,255,34,0.75);--selected-day-pulse-glow-mid:rgba(0,255,34,0.18);--selected-day-pulse-color-strong:rgba(0,255,34,0.95);--selected-day-pulse-glow:rgba(0,255,34,0.5);--selected-day-pulse-inset:hsla(0,0%,74.1%,0.8)}.capibara .detail-day{min-height:50px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;border:1px solid grey;padding:.75em;display:flex;flex-flow:column nowrap;margin:0 0 0 1em;box-sizing:border-box;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);position:absolute;border-radius:5px;transition:all .3s ease;will-change:transform,left,top;transform:translateY(calc(var(--item-height)/2*-1));z-index:4;opacity:1}.capibara .detail-day:after{content:\\\"\\\";background:inherit;width:20px;height:20px;display:block;position:absolute;left:-11px;top:calc(var(--item-height)/2 + 7px);transform:rotate(45deg);border-color:grey;border-style:solid;border-width:0 0 1px 1px}.capibara .detail-day.dd-hide{display:none}.capibara .detail-day.has-right-arrow{margin:0 16px 0 0;transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(var(--item-height)/2*-1))}.capibara .detail-day.has-right-arrow:after{border-width:1px 1px 0 0;left:unset;right:-11px}.capibara .detail-day.has-ceil-arrow{transform:translateY(-7px)}.capibara .detail-day.has-ceil-arrow:after{top:6px}.capibara .detail-day.has-ceil-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(-7px)}.capibara .detail-day.has-ceil-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-middle-arrow{transform:translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow:after{top:calc(50% - 10px)}.capibara .detail-day.has-middle-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-bottom-arrow{transform:translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow:after{top:unset;bottom:4px}.capibara .detail-day.has-bottom-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day .header-detail .title{font-size:1.25em;font-weight:700;margin-bottom:.25em;min-width:10em;max-width:20em;line-height:unset}.capibara .detail-day .header-detail .subtitle{font-size:.875em;margin-bottom:8px;min-width:10em}.capibara .detail-day .list-detail{margin:0;flex:1 1 auto}.capibara .detail-day .list-detail.list .item-detail{margin:0;font-size:.875em;position:relative;padding:.5em .5em .5em 1em;border-radius:0;box-sizing:border-box;overflow:hidden;background:transparent;border:unset;border-top:1px solid rgba(0,0,0,.1);display:flex;flex-direction:row}.capibara .detail-day .list-detail.list .item-detail .left-icon{width:8px;height:8px;min-height:unset!important;left:1px;top:10px;border-radius:50%}.capibara .detail-day .list-detail.list .item-detail .left-icon.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .detail-day .list-detail.list .item-detail .left-icon.outlined{background:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.triangle{border-radius:0;transform:rotate(45deg) skew(10deg,10deg) translate(3px,3px);width:0;height:0;border-width:5px;border-style:solid;background-color:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.shield{width:10px;height:10px;border-radius:0 0 50% 50%}.capibara .detail-day .list-detail.list .item-detail .name{flex:0 1 40%;font-weight:700;margin-bottom:0;padding-right:1em}.capibara .detail-day .list-detail.list .item-detail .item-description{flex:1 1 auto;display:flex;flex-direction:column;align-items:start}.capibara .detail-day .list-detail.list .item-detail .item-description .desc{display:flex;margin-bottom:3px;align-items:baseline}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column{flex-direction:column;align-items:start;width:100%;border-bottom-width:1px;border-bottom-style:solid;margin-bottom:0;padding-bottom:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column:last-child{border-color:transparent}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column .label{margin-right:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .label{display:inline-block;flex:1 1 65%;font-weight:700;margin-right:.5em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .val{display:flex;align-items:baseline;margin-left:1em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .prefix,.capibara .detail-day .list-detail.list .item-detail .item-description .desc .suffix{font-size:.85em;flex:0 0 auto}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .value:not(empty){margin-right:.2em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc sup{top:-1em!important}.capibara .detail-day .list-detail.column-flex{max-height:60vh;-moz-column-count:2;column-count:2;-moz-column-gap:20px;column-gap:20px;-moz-column-fill:balance;column-fill:balance}.capibara .detail-day .list-detail.column-flex.single-item{-moz-column-count:1;column-count:1}.capibara .detail-day .list-detail.flex{display:inline-flex;flex-flow:wrap;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;max-height:25%}.capibara .detail-day .list-detail.flex .item-detail{flex:0 0 auto;min-width:8em;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.capibara .detail-day .list-detail.column{-moz-columns:7em 3;columns:7em 3;min-width:30em}.capibara .detail-day .list-detail.column .item-detail{display:inline-block;width:100%}.capibara .detail-day .list-detail .item-detail{margin:4px;position:relative;padding:.5em 1em;border-radius:6px;box-sizing:border-box;overflow:hidden}.capibara .detail-day .list-detail .item-detail .name{font-weight:700;margin-bottom:.5em;color:var(--local-color-font,inherit)}.capibara .detail-day .list-detail .item-detail .item-description .desc .label{display:inline-block;font-weight:700}.capibara .detail-day .list-detail .item-detail .left-icon{min-height:10px;height:100%;position:absolute;left:0;top:0;background:var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.outlined{border:1px solid var(--local-color,inherit);box-shadow:inset 0 0 0 1px var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.triangle{background:transparent;border-color:var(--local-color,inherit) transparent transparent var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.shield{background:var(--local-color,grey)}.capibara .detail-day .elements-detail{padding:.5em 0 .25em;display:flex;flex-wrap:wrap}.capibara .detail-day .elements-detail .name{flex:1 0 100%;font-weight:700}.capibara .detail-day .elements-detail .elements-list{margin:4px -4px}.capibara .detail-day .elements-detail .elements-list .element-detail{display:inline-block;padding:.25em .875em;border-radius:3px;color:#fff;margin:.25em}.capibara .detail-day .alert{padding:.5em 0 .25em 2em;position:relative;min-width:15em;min-width:10em;max-width:30em}.capibara .detail-day .alert .alert-icon{max-width:2em;font-size:1.75em;position:absolute;left:0;top:.5em;color:grey}.capibara .detail-day .alert .red{color:#f44336}.capibara .detail-day .msj-container{margin:0 -.78em -.75em;border:1px solid grey;z-index:2}.capibara .detail-day .msj-container pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.capibara .detail-day .msj-container .msj{min-width:10em;max-width:30em;margin:0 0 .5em;padding:.75em;font-size:.875em}.capibara .detail-day .msj-container .msj-detail{display:flex;flex-direction:column;padding:.25em .5em}.capibara .detail-day .msj-container .msj-detail .email{font-size:.875em;font-style:italic;opacity:.5}.capibara .detail-day .msj-container .msj-detail .date{font-size:.725em}.capibara .detail-day{color:#37474f;background:#fff}.capibara .detail-day,.capibara .detail-day .list-detail.list .item-detail,.capibara .detail-day .list-detail.list .item-detail .desc-column,.capibara .detail-day:after{border-color:rgba(0,0,0,.2)}.capibara .detail-day .elements-detail .elements-list .element-detail{background:rgba(55,71,79,.8)}.capibara .detail-day .msj-container{background:#ffecb3;border-color:#ffca28}.capibara .detail-day .msj-container .msj-detail{background:#ffe082;border-color:#ffca28}.capibara.dark-theme .detail-day{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .detail-day:after{border-color:#404e69}.capibara.dark-theme .detail-day .list-detail .item-detail{background:transparent!important}.capibara.dark-theme .detail-day .list-detail.list .item-detail,.capibara.dark-theme .detail-day .list-detail.list .item-detail .desc-column{border-color:#404e69}.capibara.dark-theme .detail-day .elements-detail .elements-list .element-detail{background:#293243}.capibara.dark-theme .detail-day .msj-container{background:#293243;border-color:rgba(251,192,45,.4)}.capibara.dark-theme .detail-day .msj-container .msj-detail{background:rgba(251,192,45,.1)}.capibara .cap-context-menu-container{position:absolute;left:0;top:0;z-index:10;will-change:transform,left,top}.capibara .cap-context-menu-container.cm-hide .cap-context-menu{visibility:hidden;opacity:0}.capibara .cap-context-menu-container .cap-context-menu{position:absolute;min-width:250px;z-index:2;border-radius:5px;border:1px solid grey;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);font-size:.75em;transition:all .1s linear;visibility:visible;opacity:1;padding:.4em 0;vertical-align:middle}.capibara .cap-context-menu-container .cap-context-menu_item{padding:.5em 1em;flex:0 0 auto;display:flex;flex-direction:row;align-items:center;cursor:pointer}.capibara .cap-context-menu-container .cap-context-menu_item:hover{background:rgba(20,20,20,.2)}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled{opacity:.5;cursor:unset}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled:hover{background:none}.capibara .cap-context-menu-container .cap-context-menu_item.is-divider{cursor:unset;height:0;border-bottom:1px solid rgba(20,20,20,.2);padding:0;margin:.3em 1em}.capibara .cap-context-menu-container .cap-context-menu_item_icon{display:inline-block;flex:0 0 auto;padding-right:.5em}.capibara .cap-context-menu-container .cap-context-menu_item_icon svg{width:16px;height:16px}.capibara .cap-context-menu-container .cap-context-menu{color:#37474f;border-color:rgba(0,0,0,.2);background:#fff}.capibara .cap-context-menu-container .cap-context-menu svg path{fill:#37474f}.capibara.dark-theme .cap-context-menu-container .cap-context-menu{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .cap-context-menu-container .cap-context-menu svg path{fill:#f0f0f0}.capibara .hour-input{border:1px solid grey;border-radius:3px;display:flex;justify-content:center;align-items:center;height:24px;margin:8px 4px;overflow:hidden}.capibara .hour-input input{width:50%;height:inherit;border:1px solid transparent;background:transparent;font-size:.875em}.capibara .hour-input input:active,.capibara .hour-input input:focus{border:1px solid rgba(0,0,0,.1)}.capibara .hour-input span{width:8px;text-align:center}.capibara .hour-input .hh{text-align:right}.capibara .time{border-radius:6px;display:inline-block;font-size:0}.capibara .time .symbol{display:inline-block;height:auto;width:20px;font-size:2rem;text-align:center;vertical-align:center}.capibara .time input{border-radius:6px;border:2px solid transparent;width:62px;text-align:center;font-size:2rem;position:relative;transition:all .1s ease;outline:none;background:transparent;padding:6px}.capibara .time input:active,.capibara .time input:focus{transform:scale(1.06)}.capibara .time input:invalid{border:2px solid red}.capibara .buttons-group{display:flex;flex-direction:row}.capibara .buttons-group button.cap-btn-outline{border-radius:0;margin:0 -2px 0 0}.capibara .buttons-group button.cap-btn-outline:first-of-type{border-radius:6px 0 0 6px;margin-left:4px}.capibara .buttons-group button.cap-btn-outline:last-of-type{border-radius:0 6px 6px 0;margin-right:4px}.capibara .input-box-tab-container{display:flex;width:100%;flex-wrap:nowrap;border-radius:6px 6px 0 0;border:solid grey;border-width:2px 2px 0}.capibara .input-box-tab-container .input-box-tab{flex:1 1 auto;padding:.3em 1em;font-size:.9em;border-right:1px solid grey;cursor:pointer}.capibara .input-box-tab-container .input-box-tab.active{background:hsla(0,0%,58.8%,.3)}.capibara .input-box-tab-container .input-box-tab:last-child{border-right:none}.capibara .input-box-tab-container+.input-box{border-radius:0 0 6px 6px}.capibara .input-box{margin:0 16px;min-height:180px;border:2px solid grey;border-radius:6px;overflow-y:scroll;padding-bottom:60px;width:100%;max-height:300px}.capibara .input-box .search-input-container{padding:.3em;max-width:100%;text-align:center;border-bottom:1px solid hsla(0,0%,39.2%,.3);position:relative}.capibara .input-box .search-input-container .search-input{border:1px solid #646464;border-radius:13px;height:26px;padding:.5em 1em;max-width:100%;width:100%;font-size:.8em;color:inherit}.capibara .input-box .search-input-container .search-input:-moz-placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:-ms-input-placeholder+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input-clear{position:absolute;right:1em;top:.4em;color:hsla(0,0%,39.2%,.6);background-color:transparent;border-style:none}.capibara .input-box .mini-input-section{padding:.5em 2em .5em .5em;text-align:left;width:100%;position:relative;border-bottom:1px solid hsla(0,0%,39.2%,.3)}.capibara .input-box .mini-input-section.has-icon{padding:.5em 2em .5em 1.5em}.capibara .input-box .mini-input-section.clickeable{cursor:pointer}.capibara .input-box .mini-input-section.clickeable:hover label{cursor:pointer;text-decoration:underline}.capibara .input-box .mini-input-section.is-title{background:hsla(0,0%,39.2%,.1)}.capibara .input-box .mini-input-section.is-title .mini-input-section--title{opacity:.6}.capibara .input-box .mini-input-section--tooltip{position:absolute;right:0;top:1.5em;display:none;padding:.5em;margin:1em;color:#000;border-radius:3px;z-index:2;box-shadow:0 2px 5px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section label{display:flex;flex-direction:row;flex-wrap:nowrap;font-size:.875em;align-items:baseline}.capibara .input-box .mini-input-section--titles{display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:start;max-width:100%;flex:0 1 auto}.capibara .input-box .mini-input-section--content{display:flex;flex-direction:row;justify-content:end;flex:1 0 auto;font-size:1em;padding:0 .5em}.capibara .input-box .mini-input-section--subtitle,.capibara .input-box .mini-input-section--title{position:relative;width:unset;max-width:100%;flex-grow:1}.capibara .input-box .mini-input-section--subtitle{font-size:.875em}.capibara .input-box .mini-input-section--suffix{flex:0 0 auto;font-size:.875em;display:flex;flex-direction:column}.capibara .input-box .mini-input-section--icon{display:inline-block;position:absolute;left:.5em;top:.75em;width:.75em;height:.75em;border-radius:50%;background:var(--local-color,grey);box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section--link{opacity:.6;color:#2196f3;display:inline-block;position:absolute;right:.5em;top:.75em}.capibara .input-box .mini-input-section--link svg{width:18px!important;height:18px!important}.capibara .input-box .mini-input-section:hover .mini-input-section--tooltip{display:block}.capibara .input-box .mini-input-section input{text-align:center;width:4em;margin-right:.5em;border:1px solid grey;border-radius:3px;background:hsla(0,0%,100%,.2);font-size:1em;flex:0 0 4em}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:hsla(0,0%,100%,.8)}.capibara .input-box .mini-input-section--footer{margin-top:.25em;display:flex;justify-content:space-between}.capibara select.input-select{padding:.3em 1em;width:100%;flex:1 0 100%;border:1px solid grey;border-radius:6px;background:inherit;cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.capibara select.input-select option{padding:.3em;color:inherit;background:inherit}.capibara .input-section-list{margin:16px 0}.capibara .input-section-list .input-section-title{margin-bottom:8px}.capibara .input-section-list .input-section{margin:0 16px 8px}.capibara .input-section{margin:16px;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:center;position:relative}.capibara .input-section.to-right{align-items:end}.capibara .input-section.to-left{align-items:start}.capibara .input-section .small-close{position:absolute;right:-10px;top:-10px;width:1.2em;height:1.2em;font-size:.9em;border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);text-align:center;color:#fff;background:red;border-radius:50%;vertical-align:middle}.capibara .input-section .input-section-title{flex:1 1 100%;width:100%;margin:0 auto;display:flex;flex-direction:row;justify-content:center;align-items:center}.capibara .input-section .input-section-title button{margin-left:auto;flex:0 0 auto;display:flex;flex-wrap:nowrap}.capibara .input-section .input-section-link{flex:1 1 100%;display:flex;flex-direction:row;justify-content:center;align-items:baseline;padding-top:.25em}.capibara .input-section .input-section-link a{color:#2196f3;margin-top:.75rem}.capibara .input-section.is-invalid .input-box,.capibara .input-section.is-invalid input.nav-input{border:2px solid red!important;box-shadow:0 0 3px red!important}.capibara .input-section.dense input.nav-input{width:50%;font-size:1em;padding:3px 6px}.capibara .input-section input.nav-input{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:100%;min-width:130px;max-width:170px;font-size:2em;text-align:center;padding:3px 6px;background:transparent;outline:none;transition:all .1s ease;margin-bottom:8px}.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section input.nav-input.small{font-size:1.3em}.capibara .input-section .nav-input-file{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:70%;min-width:130px;padding:3px 6px;text-align:center;background:transparent;outline:none;transition:all .1s ease;position:relative}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section .nav-input-file label{flex:1 1 auto}.capibara .input-section .nav-input-file input[type=file]{display:none}.capibara .input-section .input-section-col{width:auto;position:relative;flex:1 1 10%}.capibara .input-section .input-section-col input.nav-input{min-width:unset;width:calc(100% - 1rem);max-width:7rem}.capibara .input-section.msj-input-container textarea.msj{outline:none;border-radius:6px;border:2px solid grey;width:100%;min-width:100%;max-width:100%;min-height:100px;transition:all .1s ease;padding:8px;box-sizing:border-box}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,160,0,.2)}.capibara .input-section input[type=checkbox]{width:18px;height:18px;vertical-align:middle}.capibara .time{border:2px solid rgba(0,128,0,.7);color:green}.capibara .time .symbol,.capibara .time input{color:#37474f}.capibara .time input:active,.capibara .time input:focus{border-color:green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-box-tab-container,.capibara .input-box-tab-container .input-box-tab{border-color:green}.capibara .input-box{color:#37474f;border:2px solid green}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:#fafafa}.capibara .input-box .mini-input-section--tooltip{background:#fafafa;color:#37474f;border:1px solid #37474f}.capibara .input-section select.input-select{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section select.input-select:active,.capibara .input-section select.input-select:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section select.input-select option{background:#fafafa;color:#37474f}.capibara .input-section .nav-input-file,.capibara .input-section input.nav-input{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus,.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section.msj-input-container textarea.msj{background:rgba(255,249,196,.6);border:2px solid rgba(0,0,0,.4)}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{background:rgba(255,249,196,.8);box-shadow:0 4px 6px transparent}.capibara.dark-theme .time{border:2px solid rgba(64,78,105,.7);color:#404e69}.capibara.dark-theme .time .symbol,.capibara.dark-theme .time input{color:#f0f0f0}.capibara.dark-theme .time input:active,.capibara.dark-theme .time input:focus{border-color:#404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-box-tab-container,.capibara.dark-theme .input-box-tab-container .input-box-tab{border-color:#404e69}.capibara.dark-theme .input-box{color:#f0f0f0;border:2px solid #404e69}.capibara.dark-theme .input-box .mini-input-section input{background:#404e69;color:#f0f0f0}.capibara.dark-theme .input-box .mini-input-section input:active,.capibara.dark-theme .input-box .mini-input-section input:focus{background:#222837}.capibara.dark-theme .input-box .mini-input-section--tooltip{background:#222837;color:#f0f0f0;border:1px solid #f0f0f0}.capibara.dark-theme .input-section select.input-select{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section select.input-select:active,.capibara.dark-theme .input-section select.input-select:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section select.input-select option{background:#222837;color:#f0f0f0}.capibara.dark-theme .input-section .nav-input-file,.capibara.dark-theme .input-section input.nav-input{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section .nav-input-file:active,.capibara.dark-theme .input-section .nav-input-file:focus,.capibara.dark-theme .input-section input.nav-input:active,.capibara.dark-theme .input-section input.nav-input:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section.msj-input-container textarea.msj{background:rgba(251,192,45,.1);border:2px solid #9e9e9e;color:#f0f0f0}.capibara.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.dark-theme .input-section.msj-input-container textarea.msj:focus{background:rgba(251,192,45,.3);box-shadow:0 4px 6px hsla(0,0%,62%,.2)}.capibara button{outline:none;cursor:pointer}.capibara button.cap-rotate .mdi:before,.capibara button.cap-rotate svg{transform:rotate(180deg)}.capibara .cap-btn-icon:focus,.capibara .cap-btn-outline:focus,.capibara .cap-btn-raised:focus,.capibara .cap-btn-shape:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .cap-btn-icon:disabled,.capibara .cap-btn-outline:disabled,.capibara .cap-btn-raised:disabled,.capibara .cap-btn-shape:disabled{opacity:.6}.capibara button.cap-btn-sm{font-size:.75em;margin:4px;padding:4px 8px}.capibara .cap-btn-outline{cursor:pointer;color:grey;border:2px solid grey;padding:8px 16px;margin:0 8px;border-radius:6px;font-weight:700}.capibara .cap-btn-outline.selected{background:grey}.capibara .cap-btn-raised{cursor:pointer;padding:8px 16px;margin:0 8px;border-radius:6px;background:grey;border:2px solid grey;font-weight:700}.capibara .cap-btn-icon{display:inline-block;height:32px;width:32px;outline:none;cursor:pointer;vertical-align:middle;margin-right:16px;margin-top:4px;background:transparent;border:none;padding:4px;font-size:18px;color:grey;border-radius:50%;position:relative}.capibara .cap-btn-icon svg{fill:grey}.capibara .cap-btn-icon.cap-btn-has-badge:after{content:\\\"\\\";display:block;position:absolute;right:-.2em;top:-.2em;width:.8em;height:.8em;background:grey;border-radius:50%}.capibara .cap-btn-icon.cap-btn-icon-raised{background:#fff;border:none}.capibara .cap-btn-icon.cap-btn-icon-outline{border:1px solid grey}.capibara .cap-btn-icon.cap-btn-toggle-sidebar{position:absolute;right:10px;top:10px;z-index:2;margin:0}.capibara .cap-btn-icon .mdi{font-size:24px}.capibara .cap-btn-icon .loading-icon{display:none;position:absolute;left:0;top:0}.capibara .cap-btn-icon.loading>:not(.loading-icon){display:none}.capibara .cap-btn-icon.loading .loading-icon{display:unset}.capibara .cap-btn-shape{display:inline-block;width:24px;height:24px;outline:none;cursor:pointer;vertical-align:middle;margin:4px;background:transparent;border:none;padding:0;font-size:14px}.capibara .cap-btn-shape .mdi{font-size:24px}.capibara .cap-btn-shape.cap-btn-circle{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:2px;border-radius:50%;background:grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara .cap-btn-shape.cap-btn-circle-outline{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle-outline:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:3px;border-radius:50%;border:2px solid grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle-outline span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:grey;text-align:center}.capibara .cap-btn-shape.cap-btn-drop{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-drop:before{content:\\\"\\\";display:block;position:absolute;left:4px;top:0;border-radius:0 50% 50% 50%;background:grey;width:20px;height:20px;transform:translate(-2px,4px) rotate(45deg)}.capibara .cap-btn-shape.cap-btn-drop span{position:absolute;left:0;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara.extended-right [toggle-sidebar-right] svg,.capibara.header-extended [toggle-header] svg{transform:rotate(180deg)}.capibara .cap-btn-raised{background:#00f;border:2px solid #00f;color:#fff}.capibara .cap-btn-outline{background:transparent;border:2px solid #00f;color:#00f}.capibara .cap-btn-outline.selected{background:#00f;color:#fff}.capibara .cap-btn-shape{color:#37474f}.capibara .cap-btn-shape.cap-btn-circle,.capibara .cap-btn-shape.cap-btn-drop{color:#fff}.capibara .cap-btn-shape.cap-btn-circle:before,.capibara .cap-btn-shape.cap-btn-drop:before{background:#388e3c}.capibara .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara .cap-btn-shape.cap-btn-circle-outline:before{border-color:#388e3c}.capibara .cap-btn-icon,.capibara .cap-btn-shape.cap-btn-circle-outline span{color:#37474f}.capibara .cap-btn-icon.cap-btn-has-badge:after{background:rgba(245,124,0,.8)}.capibara .cap-btn-icon.cap-btn-icon-raised{background:rgba(84,110,122,.1);border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:active{background:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:focus,.capibara .cap-btn-icon.cap-btn-icon-raised:hover{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-outline:active{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline:focus,.capibara .cap-btn-icon.cap-btn-icon-outline:hover{background:rgba(84,110,122,.1)}.capibara.dark-theme .cap-btn-raised{background:#404e69;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline{background:transparent;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline.selected{background:#404e69;color:#f0f0f0}.capibara.dark-theme .cap-btn-shape,.capibara.dark-theme .cap-btn-shape.cap-btn-circle,.capibara.dark-theme .cap-btn-shape.cap-btn-drop{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-shape.cap-btn-circle:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop:before{background:#2e7d32}.capibara.dark-theme .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline:before{border-color:#2e7d32}.capibara.dark-theme .cap-btn-icon,.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline span{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-has-badge:after{background:rgba(56,142,60,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised{background:hsla(0,0%,94.1%,.1);border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:active{background:#f0f0f0}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:hover{background:hsla(0,0%,94.1%,.3)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:active{background:hsla(0,0%,94.1%,.1)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:hover{background:hsla(0,0%,94.1%,0)}.capibara [cap-tooltip]{position:relative;display:inline-block}.capibara [cap-tooltip]:hover:before{padding:8px;opacity:1;border-width:1px;height:auto}.capibara [cap-tooltip]:before{opacity:.3;height:0;padding:0 8px;text-align:left;overflow:hidden;font-size:14px;font-weight:400;position:absolute;top:calc(100% + 18px);left:50%;transform:translatex(-50%);background-color:rgba(0,0,0,.7);border:0 solid #000;border-radius:5px;color:#fff;content:attr(cap-tooltip);text-transform:none;min-width:100px;z-index:5}.capibara .float-box-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .float-box-container:hover .float-box-ext .long-bar-container .long-bar{opacity:.3}.capibara .float-box-container .float-box{position:absolute;cursor:default;will-change:display}.capibara .float-box-container .float-box,.capibara .float-box-container .float-box .float-box-content{width:var(--day-width);max-width:var(--day-width);min-width:var(--day-width);height:var(--item-height);max-height:var(--item-height);min-height:var(--item-height);transition:box-shadow .2s ease;display:flex;flex-direction:column;z-index:1}.capibara .float-box-container .float-box .float-box-content{overflow:hidden}.capibara .float-box-container .float-box[data-is-visible=false]{display:none!important}.capibara .float-box-container .float-box:hover{z-index:2}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{z-index:2;opacity:1}.capibara .float-box-container .float-box .icon-message{position:absolute;z-index:2;top:-3px;right:-2px;width:16px;height:16px;background:#ffeb3b;color:#4e342e;fill:#4e342e;vertical-align:middle;border-radius:50%;border:1px solid #ffeb3b}.capibara .float-box-container .float-box .icon-message svg{margin:0;top:0;position:absolute}.capibara .float-box-container .float-box.has-errors:before{content:\\\"\\\";display:block;position:absolute;width:7px;height:7px;left:1px;top:1px;border-radius:50%;background:#d32f2f;z-index:2}.capibara .float-box-container .float-box.has-errors.triangle-up:before{left:2px;width:0;height:0;transform:rotate(45deg) translate(2px,2px);border-radius:0;border-color:#64dd17 transparent transparent #64dd17;border-style:solid;border-width:4px;background-color:transparent}.capibara .float-box-container .float-box.has-errors.triangle-down:before{left:2px;width:0;height:0;transform:rotate(-135deg) translate(2px,2px);border-radius:0;border-color:#d32f2f transparent transparent #d32f2f;border-style:solid;border-width:4px;background-color:transparent}.capibara .float-box-container .float-box .dot-container-bottom,.capibara .float-box-container .float-box .dot-container-middle,.capibara .float-box-container .float-box .dot-container-top{position:absolute;left:0;width:100%;overflow:visible;height:0;display:flex;justify-content:center}.capibara .float-box-container .float-box .dot-container-top{top:1px}.capibara .float-box-container .float-box .dot-container-top .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot-container-middle{top:calc(50% - 4px)}.capibara .float-box-container .float-box .dot-container-bottom{bottom:5px}.capibara .float-box-container .float-box .dot-container-bottom .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot{width:8px;min-width:8px;height:8px;border-radius:50%;margin:1px;vertical-align:middle;border:1px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.5))}.capibara .float-box-container .float-box .dot.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .float-box-container .float-box .dot.outlined{background-color:transparent}.capibara .float-box-container .float-box .dot.triangle{width:0;height:0;transform:rotate(45deg) skew(10deg,10deg) translate(1px,1px);border-left:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-bottom:5px solid transparent;border-right:5px solid transparent;border-top:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-radius:0;background-color:transparent}.capibara .float-box-container .float-box span.data{width:100%;display:block;position:relative;font-size:.875em;text-align:center;box-sizing:border-box;height:calc(var(--item-height)/2);line-height:calc(var(--item-height)/2);margin-bottom:2px;font-weight:700;box-shadow:inset 0 0 10px hsla(0,0%,100%,.2);border-radius:3px;color:var(--local-color-font,#fff);-webkit-backdrop-filter:opacity(20%);backdrop-filter:opacity(20%);background:var(--local-color,rgba(0,0,0,.4));border:2px solid var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.data.shape-outlined{background-color:transparent!important;color:var(--local-color,inherit)}.capibara .float-box-container .float-box span.data.shape-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;z-index:-1}.capibara .float-box-container .float-box span.data.shape-bar{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px}.capibara .float-box-container .float-box span.data.shape-bar:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-outlined:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block}.capibara .float-box-container .float-box span.data.shape-bar-dashed{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-dashed:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-dashed:before{content:\\\"\\\";background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;background-color:transparent;background-size:10px 10px;background-image:repeating-linear-gradient(45deg,var(--local-color,inherit),var(--local-color,inherit) 3px,transparent 0,transparent 50%)}.capibara .float-box-container .float-box span.rowdot--row{display:flex;max-height:calc(var(--item-height)/4 - 1px);height:calc(var(--item-height)/4 - 1px);width:calc(var(--day-width) - 2px);line-height:0;color:transparent;margin:1px;border-color:var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.rowdot--row:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.rowdot--row:empty{display:none!important}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot{width:calc(var(--day-width)/4 - 2px);height:calc(var(--item-height)/4 - 2px);margin-right:1px;vertical-align:middle;border:3px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.8));box-shadow:0 0 1px 1px rgba(0,0,0,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined{background-color:hsla(0,0%,39.2%,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-rounded{border-radius:50%;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined-rounded{border-radius:50%;background-color:transparent;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box .plot-floatbox-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--local-color,rgba(0,0,0,.4));transition:opacity .2s ease}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe{background:repeating-linear-gradient(53deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe-inverse{background:repeating-linear-gradient(127deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .icon-floatbox{width:calc(var(--day-width) - 16px);margin:6px;position:absolute;left:0;top:0;opacity:.8}.capibara .float-box-container .icon-floatbox svg path{fill:var(--local-color,rgba(0,0,0,.4));filter:drop-shadow(0 0 1px rgba(0,0,0,.2))}.capibara .float-box-container .icon-floatbox:hover{opacity:1}.capibara .float-box-container .float-box-ext{position:absolute;overflow:visible;cursor:default;transition:box-shadow .2s ease;will-change:display;pointer-events:none}.capibara .float-box-container .float-box-ext .long-bar-container{position:absolute;left:var(--day-width);top:0;display:flex;flex-direction:column;justify-content:start;align-items:start}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar{width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);min-width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);height:calc(var(--item-height)/4 - 3.5px);line-height:0;color:transparent;background:var(--local-color,rgba(0,0,0,.4));border-radius:0 3px 3px 0;margin-left:-3px;margin-top:1px;margin-bottom:1px;opacity:var(--local-opacity,1);border:2px solid rgba(0,0,0,.2);border-left-width:0;transition:opacity .2s ease}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar.solid{opacity:1}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar:first-of-type{margin-top:4px}.capibara .float-box-container .float-box:hover{box-shadow:0 0 2px 7px rgba(113,189,255,.4)}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px rgba(113,189,255,.4)}.capibara .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#f84747}.capibara .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fdd835}.capibara .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#38993d}.capibara .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.2)}.capibara.dark-theme .float-box-container .float-box:hover{box-shadow:0 0 2px 7px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#aa1a1a}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fbcd00}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#388e3c}.capibara.dark-theme .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.3)}.capibara.dark-theme span.data.shape-outlined{color:#fff!important}.capibara .progress-bar{width:100%;height:4px;background-color:hsla(0,0%,86.7%,.2);overflow:hidden;position:absolute;left:0;bottom:0;transition:height 1s ease}.capibara .progress-bar.hide-progress{height:0}.capibara .progress-bar:before{-webkit-animation-name:loading-fast1;animation-name:loading-fast1;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.capibara .progress-bar:after,.capibara .progress-bar:before{content:\\\"\\\";position:absolute;transform:translateX(-100%);width:62.5%;height:100%;background-color:#292929;-webkit-animation-duration:2s;animation-duration:2s}.capibara .progress-bar:after{-webkit-animation-name:loading-fast2;animation-name:loading-fast2;-webkit-animation-delay:1.3s;animation-delay:1.3s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}span.mdi{min-width:14px;min-height:14px;display:inline-block}span.mdi.mdi-subdirectory-arrow-right{color:rgba(0,0,0,.2)}.capibara .light{display:block;width:18px;height:18px;flex:0 0 18px;border-radius:50%;margin:12px 8px;border:2px solid rgba(0,0,0,.3);background:var(--light-color,unset);border-color:hsla(0,0%,100%,.8)}.capibara .light.red-light{background:#f84747}.capibara .light.yellow-light{background:#fdd835}.capibara .light.green-light{background:#38993d}.capibara .light.disabled-light{background:#737373}.capibara .light.blue-light{background:#0277bd}.capibara.dark-theme .light{border-color:#404e69}.capibara.dark-theme .light.red-light{background:#aa1a1a}.capibara.dark-theme .light.yellow-light{background:#fbcd00}.capibara.dark-theme .light.green-light{background:#388e3c}.capibara .tab-select-container{position:relative;display:inline-flex;align-items:center}.capibara .tab-select-container:after{content:\\\"\\\";position:absolute;right:20px;top:50%;transform:translateY(-50%);pointer-events:none;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #fff}.capibara select.tabs-select{background:grey;color:#fff;font-size:16px;outline:none;width:100px;padding:3px 28px 3px 18px;font-weight:700;border:1px solid transparent;margin:8px;border-radius:30px;transition:background .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none}.capibara select.tabs-select option{color:grey;background:#fff;padding:15px}.capibara select.tabs-select.disabled{color:grey}.capibara select.tabs-select:hover{border-color:grey}\", \"\"]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvc2Nzcy9zdHlsZS5zY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvc2Nzcy9zdHlsZS5zY3NzPzQxM2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVJvYm90bzppdGFsLHdnaHRAMCwzMDA7MCw0MDA7MCw1MDA7MCw3MDA7MCw5MDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw3MDA7MSw5MDAmZGlzcGxheT1zd2FwKTtcIl0pO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdHstLWhlYWRlci10b3AtaGVpZ2h0OjQwcHg7LS1oZWFkZXItaGVpZ2h0Ojk4cHg7LS1oZWFkZXItbGFiZWxzLWhlaWdodDo1MHB4Oy0taGVhZGVyLWRheS1oZWlnaHQ6MjRweDstLWV4LWhlYWRlci1oZWlnaHQ6MTIwcHg7LS1oZWFkZXItaW5wdXQtaGVpZ2h0OjIwcHg7LS1uYXYtd2lkdGg6MjAwcHg7LS1uYXYtaXRlbS1jb2wtd2lkdGg6NjBweDstLWluaXRpYWwtbmF2LXdpZHRoOjBweDstLWV4LW5hdi13aWR0aDowcHg7LS1idG4tbmF2LXdpZHRoOjExN3B4Oy0tbmF2LXJpZ2h0LXdpZHRoOjMwMHB4Oy0taXRlbS1taW4td2lkdGg6MTAwcHg7LS1pdGVtLWhlaWdodDo0NXB4Oy0tZGF5LXdpZHRoOjQ1cHg7LS1mb250LXNpemU6MTZweDstLW1vYmlsZS1mb290ZXItaGVpZ2h0OjUwcHh9QC13ZWJraXQta2V5ZnJhbWVzIHB1bHNlTWVzc2FnZXswJXtib3JkZXItY29sb3I6cmdiYSgyMTEsNDcsNDcsLjMpIHJnYmEoMjExLDQ3LDQ3LC4zKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudH10b3tib3JkZXItY29sb3I6I2QzMmYyZiAjZDMyZjJmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fX1Aa2V5ZnJhbWVzIHB1bHNlTWVzc2FnZXswJXtib3JkZXItY29sb3I6cmdiYSgyMTEsNDcsNDcsLjMpIHJnYmEoMjExLDQ3LDQ3LC4zKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudH10b3tib3JkZXItY29sb3I6I2QzMmYyZiAjZDMyZjJmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fX1ALXdlYmtpdC1rZXlmcmFtZXMgcHVsc2VCYWNrZ3JvdW5kezAle2JhY2tncm91bmQ6cmdiYSgyMTEsNDcsNDcsLjMpfXRve2JhY2tncm91bmQ6I2QzMmYyZn19QGtleWZyYW1lcyBwdWxzZUJhY2tncm91bmR7MCV7YmFja2dyb3VuZDpyZ2JhKDIxMSw0Nyw0NywuMyl9dG97YmFja2dyb3VuZDojZDMyZjJmfX1ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZy1mYXN0MXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9NDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgyMDAlKX19QGtleWZyYW1lcyBsb2FkaW5nLWZhc3QxezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX00MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX1ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZy1mYXN0MnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9MTUle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgyMDAlKX19QGtleWZyYW1lcyBsb2FkaW5nLWZhc3QyezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0xNSV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX1ALXdlYmtpdC1rZXlmcmFtZXMgcHVsc2VTZWxlY3RlZERheXswJSx0b3tib3JkZXItY29sb3I6dmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWNvbG9yLGhzbGEoMCwwJSwxMDAlLC41KSk7Ym94LXNoYWRvdzowIDAgMCAycHggdmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWNvbG9yLGhzbGEoMCwwJSwxMDAlLC40KSksaW5zZXQgMCAwIDVweCB2YXIoLS1zZWxlY3RlZC1kYXktcHVsc2UtaW5zZXQsaHNsYSgwLDAlLDc0LjElLC44KSl9MjUlLDc1JXtib3JkZXItY29sb3I6dmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWNvbG9yLW1pZCxoc2xhKDAsMCUsMTAwJSwuNykpO2JveC1zaGFkb3c6MCAwIDAgMnB4IHZhcigtLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvci1taWQsaHNsYSgwLDAlLDEwMCUsLjY1KSksMCAwIDZweCB2YXIoLS1zZWxlY3RlZC1kYXktcHVsc2UtZ2xvdy1taWQsaHNsYSgwLDAlLDEwMCUsLjI1KSksaW5zZXQgMCAwIDVweCB2YXIoLS1zZWxlY3RlZC1kYXktcHVsc2UtaW5zZXQsaHNsYSgwLDAlLDc0LjElLC44KSl9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1zZWxlY3RlZC1kYXktcHVsc2UtY29sb3Itc3Ryb25nLGhzbGEoMCwwJSwxMDAlLC45NSkpO2JveC1zaGFkb3c6MCAwIDAgMnB4IHZhcigtLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvci1zdHJvbmcsaHNsYSgwLDAlLDEwMCUsLjkpKSwwIDAgMTJweCB2YXIoLS1zZWxlY3RlZC1kYXktcHVsc2UtZ2xvdyxoc2xhKDAsMCUsMTAwJSwuNSkpLGluc2V0IDAgMCA1cHggdmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWluc2V0LGhzbGEoMCwwJSw3NC4xJSwuOCkpfX1Aa2V5ZnJhbWVzIHB1bHNlU2VsZWN0ZWREYXl7MCUsdG97Ym9yZGVyLWNvbG9yOnZhcigtLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvcixoc2xhKDAsMCUsMTAwJSwuNSkpO2JveC1zaGFkb3c6MCAwIDAgMnB4IHZhcigtLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvcixoc2xhKDAsMCUsMTAwJSwuNCkpLGluc2V0IDAgMCA1cHggdmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWluc2V0LGhzbGEoMCwwJSw3NC4xJSwuOCkpfTI1JSw3NSV7Ym9yZGVyLWNvbG9yOnZhcigtLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvci1taWQsaHNsYSgwLDAlLDEwMCUsLjcpKTtib3gtc2hhZG93OjAgMCAwIDJweCB2YXIoLS1zZWxlY3RlZC1kYXktcHVsc2UtY29sb3ItbWlkLGhzbGEoMCwwJSwxMDAlLC42NSkpLDAgMCA2cHggdmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWdsb3ctbWlkLGhzbGEoMCwwJSwxMDAlLC4yNSkpLGluc2V0IDAgMCA1cHggdmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWluc2V0LGhzbGEoMCwwJSw3NC4xJSwuOCkpfTUwJXtib3JkZXItY29sb3I6dmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWNvbG9yLXN0cm9uZyxoc2xhKDAsMCUsMTAwJSwuOTUpKTtib3gtc2hhZG93OjAgMCAwIDJweCB2YXIoLS1zZWxlY3RlZC1kYXktcHVsc2UtY29sb3Itc3Ryb25nLGhzbGEoMCwwJSwxMDAlLC45KSksMCAwIDEycHggdmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWdsb3csaHNsYSgwLDAlLDEwMCUsLjUpKSxpbnNldCAwIDAgNXB4IHZhcigtLXNlbGVjdGVkLWRheS1wdWxzZS1pbnNldCxoc2xhKDAsMCUsNzQuMSUsLjgpKX19LmNhcGliYXJhLmMtcmVkOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNkZjU1NGIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtcmVkOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNkZjU1NGJ9LmNhcGliYXJhLmMtcmVkOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZmRmYWY5fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZmRmYWY5O2JvcmRlci1jb2xvcjojZjk5ZDk3fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2ZkZmFmOTtib3JkZXItYm90dG9tLWNvbG9yOiNmOTlkOTd9LmNhcGliYXJhLmMtcmVkOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZmRmYWY5KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZjk5ZDk3fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2JhMTYwYX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6I2JhMTYwYX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLXJlZCA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1yZWQgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtcmVkIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtcmVkIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcmVkIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLXJlZCBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZjQ0MzM2IWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1yZWQgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC42KX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLXJlZCAudGltZSAuc3ltYm9se2NvbG9yOiNmNDQzMzZ9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXJlZCAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcmVkIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZjQ0MzM2O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjQ0LDY3LDU0LC4yKX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC42KX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6I2Y0NDMzNjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI0NCw2Nyw1NCwuMil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC42KX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmNDQzMzY7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNDQsNjcsNTQsLjIpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNmNDQzMzZ9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjQ0LDY3LDU0LC4yKX0uY2FwaWJhcmEuYy1yZWQgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2Y0NDMzNjtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC44KX0uY2FwaWJhcmEuYy1yZWQgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmNDQzMzZ9LmNhcGliYXJhLmMtcmVkIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC44KX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLXJlZCAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyNDQsNjcsNTQsLjUpfS5jYXBpYmFyYSAuYy1yZWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZjQ0MzM2IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcmVkLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZDIxOTBiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcmVkLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZjg4NzdmIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcmVkLS10ZXh0e2NvbG9yOiNmNDQzMzYhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1yZWQtZC0tdGV4dHtjb2xvcjojZDIxOTBiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcmVkLWwtLXRleHR7Y29sb3I6I2Y4ODc3ZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1yZWR7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjZjQ0MzM2fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcmVkIC5sZWZ0LWljb257YmFja2dyb3VuZDojZjQ0MzM2fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcmVkIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZjQ0MzM2O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjQ0LDY3LDU0LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXJlZCAubmFtZXtjb2xvcjojZjQ0MzM2fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLXJlZHstLWxvY2FsLWNvbG9yOiNmNDQzMzY7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLXJlZCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtcmVkLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLXJlZCAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojZjQ0MzM2fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXJlZC5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXJlZC5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcmVkOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLXJlZHtiYWNrZ3JvdW5kOiNmNDQzMzZ9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojZDAzNzZiIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2QwMzc2Yn0uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZjBlM2U3fS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2YwZTNlNztib3JkZXItY29sb3I6I2YyN2JhM30uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjBlM2U3O2JvcmRlci1ib3R0b20tY29sb3I6I2YyN2JhM30uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZjBlM2U3KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2YyN2JhM30uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzkzMGUzYn0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTMwZTNifS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLXBpbmsgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLXBpbmsgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLXBpbmsgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLXBpbmsgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1waW5rIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2U5MWU2MyFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1waW5rIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNlOTFlNjMhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1waW5rIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuNil9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtcGluayAudGltZSAuc3ltYm9se2NvbG9yOiNlOTFlNjN9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcGluayAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2U5MWU2Mztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMywzMCw5OSwuMil9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyMzMsMzAsOTksLjYpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6I2U5MWU2Mztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMywzMCw5OSwuMil9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuNil9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzMsMzAsOTksLjIpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2U5MWU2M30uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMzLDMwLDk5LC4yKX0uY2FwaWJhcmEuYy1waW5rIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZTkxZTYzO2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjgpfS5jYXBpYmFyYS5jLXBpbmsgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2U5MWU2Mztjb2xvcjojZTkxZTYzfS5jYXBpYmFyYS5jLXBpbmsgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC44KX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1waW5rIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDIzMywzMCw5OSwuNSl9LmNhcGliYXJhIC5jLXBpbmstLWJhY2tncm91bmR7YmFja2dyb3VuZDojZTkxZTYzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcGluay1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2FhMTE0NSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXBpbmstbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmMDY0OTMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1waW5rLS10ZXh0e2NvbG9yOiNlOTFlNjMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1waW5rLWQtLXRleHR7Y29sb3I6I2FhMTE0NSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXBpbmstbC0tdGV4dHtjb2xvcjojZjA2NDkzIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXBpbmt7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuMik7Ym9yZGVyOjFweCBzb2xpZCAjZTkxZTYzfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcGluayAubGVmdC1pY29ue2JhY2tncm91bmQ6I2U5MWU2M30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXBpbmsgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNlOTFlNjM7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyMzMsMzAsOTksLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcGluayAubmFtZXtjb2xvcjojZTkxZTYzfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLXBpbmt7LS1sb2NhbC1jb2xvcjojZTkxZTYzOy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1waW5rLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1waW5rLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLXBpbmsgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2U5MWU2M30uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1waW5rLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC43KTtib3JkZXItY29sb3I6cmdiYSgyMzMsMzAsOTksLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcGluazpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC4yKTtib3JkZXItY29sb3I6cmdiYSgyMzMsMzAsOTksLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1waW5re2JhY2tncm91bmQ6I2U5MWU2M30uY2FwaWJhcmEuYy1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzhkM2Q5YiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzhkM2Q5Yn0uY2FwaWJhcmEuYy1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNkNmNiZDh9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNkNmNiZDg7Ym9yZGVyLWNvbG9yOiNjYTYxZGN9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZDZjYmQ4O2JvcmRlci1ib3R0b20tY29sb3I6I2NhNjFkY30uY2FwaWJhcmEuYy1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNkNmNiZDgpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNjYTYxZGN9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojNTIxNDVkfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTIxNDVkfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtcHVycGxlIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1wdXJwbGUgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLXB1cnBsZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTYsMzksMTc2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1wdXJwbGUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1wdXJwbGUgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojOWMyN2IwIWltcG9ydGFudH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtcHVycGxlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojOWMyN2IwIWltcG9ydGFudH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1wdXJwbGUgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuNil9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1wdXJwbGUgLnRpbWUgLnN5bWJvbHtjb2xvcjojOWMyN2IwfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzljMjdiMDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDE1NiwzOSwxNzYsLjIpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgxNTYsMzksMTc2LC42KX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzljMjdiMDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDE1NiwzOSwxNzYsLjIpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjYpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzljMjdiMDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDE1NiwzOSwxNzYsLjIpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICM5YzI3YjB9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTU2LDM5LDE3NiwuMil9LmNhcGliYXJhLmMtcHVycGxlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjgpfS5jYXBpYmFyYS5jLXB1cnBsZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7Y29sb3I6IzljMjdiMH0uY2FwaWJhcmEuYy1wdXJwbGUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC44KX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLXB1cnBsZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMTU2LDM5LDE3NiwuNSl9LmNhcGliYXJhIC5jLXB1cnBsZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM5YzI3YjAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1wdXJwbGUtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM2NDE5NzEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1wdXJwbGUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNjMzRjZDchaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1wdXJwbGUtLXRleHR7Y29sb3I6IzljMjdiMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXB1cnBsZS1kLS10ZXh0e2NvbG9yOiM2NDE5NzEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1wdXJwbGUtbC0tdGV4dHtjb2xvcjojYzM0Y2Q3IWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXB1cnBsZXtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuMik7Ym9yZGVyOjFweCBzb2xpZCAjOWMyN2IwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcHVycGxlIC5sZWZ0LWljb257YmFja2dyb3VuZDojOWMyN2IwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcHVycGxlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjOWMyN2IwO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMTU2LDM5LDE3NiwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1wdXJwbGUgLm5hbWV7Y29sb3I6IzljMjdiMH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1wdXJwbGV7LS1sb2NhbC1jb2xvcjojOWMyN2IwOy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1wdXJwbGUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLXB1cnBsZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1wdXJwbGUgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzljMjdiMH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1wdXJwbGUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC43KTtib3JkZXItY29sb3I6cmdiYSgxNTYsMzksMTc2LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXB1cnBsZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXB1cnBsZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLXB1cnBsZXtiYWNrZ3JvdW5kOiM5YzI3YjB9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzZlNTI5ZiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojNmU1MjlmfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZGVkZWRmfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNkZWRlZGY7Ym9yZGVyLWNvbG9yOiM5ZjgwZDd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNkZWRlZGY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOWY4MGQ3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZGVkZWRmKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM5ZjgwZDd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzNiMjE2YX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMzYjIxNmF9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDMsNTgsMTgzLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzY3M2FiNyFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDMsNTgsMTgzLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiM2NzNhYjchaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuNil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC50aW1lIC5zeW1ib2x7Y29sb3I6IzY3M2FiN30uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzY3M2FiNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEwMyw1OCwxODMsLjIpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjYpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM2NzNhYjc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMDMsNTgsMTgzLC4yKX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjYpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM2NzNhYjc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMDMsNTgsMTgzLC4yKX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzY3M2FiN30uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEwMyw1OCwxODMsLjIpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzY3M2FiNztiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuOCl9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiM2NzNhYjc7Y29sb3I6IzY3M2FiN30uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuOCl9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgxMDMsNTgsMTgzLC41KX0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNjczYWI3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0NjI4N2QhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLXB1cnBsZS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzkxNmRkMSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLS10ZXh0e2NvbG9yOiM2NzNhYjchaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLXB1cnBsZS1kLS10ZXh0e2NvbG9yOiM0NjI4N2QhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLXB1cnBsZS1sLS10ZXh0e2NvbG9yOiM5MTZkZDEhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1wdXJwbGV7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjIpO2JvcmRlcjoxcHggc29saWQgIzY3M2FiN30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtcHVycGxlIC5sZWZ0LWljb257YmFja2dyb3VuZDojNjczYWI3fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1wdXJwbGUgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICM2NzNhYjc7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgxMDMsNTgsMTgzLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtcHVycGxlIC5uYW1le2NvbG9yOiM2NzNhYjd9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtZGVlcC1wdXJwbGV7LS1sb2NhbC1jb2xvcjojNjczYWI3Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1kZWVwLXB1cnBsZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtZGVlcC1wdXJwbGUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtZGVlcC1wdXJwbGUgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzY3M2FiN30uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLXB1cnBsZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1wdXJwbGUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLXB1cnBsZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWRlZXAtcHVycGxle2JhY2tncm91bmQ6IzY3M2FiN30uY2FwaWJhcmEuYy1pbmRpZ286bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzU3NjI5ZCB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1pbmRpZ286bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzU3NjI5ZH0uY2FwaWJhcmEuYy1pbmRpZ286bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNlMGUwZTB9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNlMGUwZTA7Ym9yZGVyLWNvbG9yOiM4NTkxZDV9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZTBlMGUwO2JvcmRlci1ib3R0b20tY29sb3I6Izg1OTFkNX0uY2FwaWJhcmEuYy1pbmRpZ286bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNlMGUwZTApIWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ286bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM4NTkxZDV9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMjUyZjY5fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMjUyZjY5fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtaW5kaWdvIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWluZGlnbyA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNjMsODEsMTgxLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1pbmRpZ28gLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNjMsODEsMTgxLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1pbmRpZ28gLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1pbmRpZ28gLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojM2Y1MWI1IWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtaW5kaWdvIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNjMsODEsMTgxLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMzZjUxYjUhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWluZGlnbyAudGltZXtib3JkZXItY29sb3I6cmdiYSg2Myw4MSwxODEsLjYpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtaW5kaWdvIC50aW1lIC5zeW1ib2x7Y29sb3I6IzNmNTFiNX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtaW5kaWdvIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzZjUxYjU7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2Myw4MSwxODEsLjIpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LWJveCwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSg2Myw4MSwxODEsLjYpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojM2Y1MWI1O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjMsODEsMTgxLC4yKX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSg2Myw4MSwxODEsLjYpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzNmNTFiNTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDYzLDgxLDE4MSwuMil9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzNmNTFiNX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2Myw4MSwxODEsLjIpfS5jYXBpYmFyYS5jLWluZGlnbyAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojM2Y1MWI1O2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjgpfS5jYXBpYmFyYS5jLWluZGlnbyAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzZjUxYjU7Y29sb3I6IzNmNTFiNX0uY2FwaWJhcmEuYy1pbmRpZ28gLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjgpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtaW5kaWdvIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDYzLDgxLDE4MSwuNSl9LmNhcGliYXJhIC5jLWluZGlnby0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMzZjUxYjUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1pbmRpZ28tZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMyYjM4N2MhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1pbmRpZ28tbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM3MjgwY2UhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1pbmRpZ28tLXRleHR7Y29sb3I6IzNmNTFiNSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWluZGlnby1kLS10ZXh0e2NvbG9yOiMyYjM4N2MhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1pbmRpZ28tbC0tdGV4dHtjb2xvcjojNzI4MGNlIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWluZGlnb3tiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC4yKTtib3JkZXI6MXB4IHNvbGlkICMzZjUxYjV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1pbmRpZ28gLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMzZjUxYjV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1pbmRpZ28gLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICMzZjUxYjU7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSg2Myw4MSwxODEsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtaW5kaWdvIC5uYW1le2NvbG9yOiMzZjUxYjV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtaW5kaWdvey0tbG9jYWwtY29sb3I6IzNmNTFiNTstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtaW5kaWdvLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1pbmRpZ28sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtaW5kaWdvIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMzZjUxYjV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtaW5kaWdvLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC43KTtib3JkZXItY29sb3I6cmdiYSg2Myw4MSwxODEsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtaW5kaWdvLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1pbmRpZ286aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtaW5kaWdve2JhY2tncm91bmQ6IzNmNTFiNX0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiMzMTc2YmIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojMzE3NmJifS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNkMWRjZTZ9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZDFkY2U2O2JvcmRlci1jb2xvcjojNjRhOWVkfS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNkMWRjZTY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjRhOWVkfS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNkMWRjZTYpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojNjRhOWVkfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMGU0Mzc3fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMwZTQzNzd9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtYmx1ZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNSwxMTgsMjEwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJsdWUgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1ibHVlIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtYmx1ZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJsdWUgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojMTk3NmQyIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWJsdWUgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNSwxMTgsMjEwLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMxOTc2ZDIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1ibHVlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjYpfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWJsdWUgLnRpbWUgLnN5bWJvbHtjb2xvcjojMTk3NmQyfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNSwxMTgsMjEwLC4yKX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjYpfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzE5NzZkMjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1LDExOCwyMTAsLjIpfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC42KX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzE5NzZkMjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1LDExOCwyMTAsLjIpfS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzE5NzZkMn0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjUsMTE4LDIxMCwuMil9LmNhcGliYXJhLmMtYmx1ZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzE5NzZkMjtiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuOCl9LmNhcGliYXJhLmMtYmx1ZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMTk3NmQyO2NvbG9yOiMxOTc2ZDJ9LmNhcGliYXJhLmMtYmx1ZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC44KX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1ibHVlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyNSwxMTgsMjEwLC41KX0uY2FwaWJhcmEgLmMtYmx1ZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMxOTc2ZDIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMTE1MDhlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzRlOWNlYSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWUtLXRleHR7Y29sb3I6IzE5NzZkMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWUtZC0tdGV4dHtjb2xvcjojMTE1MDhlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZS1sLS10ZXh0e2NvbG9yOiM0ZTljZWEhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZXtiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjMTk3NmQyfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzE5NzZkMn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWUgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICMxOTc2ZDI7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyNSwxMTgsMjEwLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWUgLm5hbWV7Y29sb3I6IzE5NzZkMn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1ibHVley0tbG9jYWwtY29sb3I6IzE5NzZkMjstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtYmx1ZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtYmx1ZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1ibHVlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMxOTc2ZDJ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1LDExOCwyMTAsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1ibHVle2JhY2tncm91bmQ6IzE5NzZkMn0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiMxY2EwZGIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojMWNhMGRifS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNkM2U3ZjB9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZDNlN2YwO2JvcmRlci1jb2xvcjojNjBjY2ZkfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNkM2U3ZjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjBjY2ZkfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNkM2U3ZjApIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojNjBjY2ZkfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMDI2MzhmfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMwMjYzOGZ9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgzLDE2OSwyNDQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMywxNjksMjQ0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgzLDE2OSwyNDQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojMDNhOWY0IWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgzLDE2OSwyNDQsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzAzYTlmNCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMywxNjksMjQ0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC50aW1lIC5zeW1ib2x7Y29sb3I6IzAzYTlmNH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDNhOWY0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMywxNjksMjQ0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojMDNhOWY0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMywxNjksMjQ0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMywxNjksMjQ0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAzYTlmNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDMsMTY5LDI0NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjMDNhOWY0fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgzLDE2OSwyNDQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQ7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuOCl9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMDNhOWY0O2NvbG9yOiMwM2E5ZjR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjgpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMywxNjksMjQ0LC41KX0uY2FwaWJhcmEgLmMtbGlnaHQtYmx1ZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwM2E5ZjQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDI3NWE4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtYmx1ZS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzQ3YzRmZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtLXRleHR7Y29sb3I6IzAzYTlmNCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtZC0tdGV4dHtjb2xvcjojMDI3NWE4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtYmx1ZS1sLS10ZXh0e2NvbG9yOiM0N2M0ZmQhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtYmx1ZXtiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC4yKTtib3JkZXI6MXB4IHNvbGlkICMwM2E5ZjR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ibHVlIC5sZWZ0LWljb257YmFja2dyb3VuZDojMDNhOWY0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtYmx1ZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzAzYTlmNDtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDMsMTY5LDI0NCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ibHVlIC5uYW1le2NvbG9yOiMwM2E5ZjR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtbGlnaHQtYmx1ZXstLWxvY2FsLWNvbG9yOiMwM2E5ZjQ7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWxpZ2h0LWJsdWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWxpZ2h0LWJsdWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtbGlnaHQtYmx1ZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojMDNhOWY0fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpZ2h0LWJsdWUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saWdodC1ibHVlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saWdodC1ibHVlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWxpZ2h0LWJsdWV7YmFja2dyb3VuZDojMDNhOWY0fS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzE1YWNiZiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiMxNWFjYmZ9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2I5ZTJlOH0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNiOWUyZTg7Ym9yZGVyLWNvbG9yOiMzYmU5ZmZ9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2I5ZTJlODtib3JkZXItYm90dG9tLWNvbG9yOiMzYmU5ZmZ9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2I5ZTJlOCkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMzYmU5ZmZ9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMwMDYyNmV9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzAwNjI2ZX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1jeWFuIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1jeWFuIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE4OCwyMTIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1jeWFuIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1jeWFuIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtY3lhbiAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMGJjZDQhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtY3lhbiBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMDBiY2Q0IWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtY3lhbiAudGltZXtib3JkZXItY29sb3I6cmdiYSgwLDE4OCwyMTIsLjYpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWN5YW4gLnRpbWUgLnN5bWJvbHtjb2xvcjojMDBiY2Q0fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMGJjZDQ7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE4OCwyMTIsLjIpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LWJveCwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxODgsMjEyLC42KX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMGJjZDQ7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE4OCwyMTIsLjIpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgwLDE4OCwyMTIsLjYpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDBiY2Q0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxODgsMjEyLC4yKX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMwMGJjZDR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTg4LDIxMiwuMil9LmNhcGliYXJhLmMtY3lhbiAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzAwYmNkNDtiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC44KX0uY2FwaWJhcmEuYy1jeWFuIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMwMGJjZDQ7Y29sb3I6IzAwYmNkNH0uY2FwaWJhcmEuYy1jeWFuIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuOCl9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtY3lhbiAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgwLDE4OCwyMTIsLjUpfS5jYXBpYmFyYSAuYy1jeWFuLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAwYmNkNCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWN5YW4tZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMDc4ODghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1jeWFuLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMjJlNmZmIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtY3lhbi0tdGV4dHtjb2xvcjojMDBiY2Q0IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtY3lhbi1kLS10ZXh0e2NvbG9yOiMwMDc4ODghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1jeWFuLWwtLXRleHR7Y29sb3I6IzIyZTZmZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1jeWFue2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjIpO2JvcmRlcjoxcHggc29saWQgIzAwYmNkNH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWN5YW4gLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMwMGJjZDR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1jeWFuIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjMDBiY2Q0O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMCwxODgsMjEyLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWN5YW4gLm5hbWV7Y29sb3I6IzAwYmNkNH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1jeWFuey0tbG9jYWwtY29sb3I6IzAwYmNkNDstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtY3lhbiwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtY3lhbiwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1jeWFuIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMwMGJjZDR9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtY3lhbi5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxODgsMjEyLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWN5YW4uYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWN5YW46aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxODgsMjEyLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtY3lhbntiYWNrZ3JvdW5kOiMwMGJjZDR9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojMGY4NzdjIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzBmODc3Y30uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojOGFkOGQxfS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6IzhhZDhkMTtib3JkZXItY29sb3I6IzAwZmNlNH0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojOGFkOGQxO2JvcmRlci1ib3R0b20tY29sb3I6IzAwZmNlNH0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjOGFkOGQxKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzAwZmNlNH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzAwMzAyY30uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAzMDJjfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLXRlYWwgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLXRlYWwgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLXRlYWwgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLXRlYWwgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy10ZWFsIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzAwOTY4OCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy10ZWFsIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMwMDk2ODghaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy10ZWFsIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuNil9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtdGVhbCAudGltZSAuc3ltYm9se2NvbG9yOiMwMDk2ODh9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbCAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAwOTY4ODtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTUwLDEzNiwuMil9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgwLDE1MCwxMzYsLjYpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzAwOTY4ODtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTUwLDEzNiwuMil9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuNil9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE1MCwxMzYsLjIpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzAwOTY4OH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxNTAsMTM2LC4yKX0uY2FwaWJhcmEuYy10ZWFsIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojMDA5Njg4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjgpfS5jYXBpYmFyYS5jLXRlYWwgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzAwOTY4ODtjb2xvcjojMDA5Njg4fS5jYXBpYmFyYS5jLXRlYWwgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC44KX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy10ZWFsIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDAsMTUwLDEzNiwuNSl9LmNhcGliYXJhIC5jLXRlYWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDA5Njg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtdGVhbC1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAwNGE0MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXRlYWwtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMGUzY2QhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy10ZWFsLS10ZXh0e2NvbG9yOiMwMDk2ODghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy10ZWFsLWQtLXRleHR7Y29sb3I6IzAwNGE0MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXRlYWwtbC0tdGV4dHtjb2xvcjojMDBlM2NkIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXRlYWx7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuMik7Ym9yZGVyOjFweCBzb2xpZCAjMDA5Njg4fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtdGVhbCAubGVmdC1pY29ue2JhY2tncm91bmQ6IzAwOTY4OH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXRlYWwgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICMwMDk2ODg7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDE1MCwxMzYsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtdGVhbCAubmFtZXtjb2xvcjojMDA5Njg4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLXRlYWx7LS1sb2NhbC1jb2xvcjojMDA5Njg4Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy10ZWFsLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy10ZWFsLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLXRlYWwgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzAwOTY4OH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy10ZWFsLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC43KTtib3JkZXItY29sb3I6cmdiYSgwLDE1MCwxMzYsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtdGVhbC5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtdGVhbDpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC4yKTtib3JkZXItY29sb3I6cmdiYSgwLDE1MCwxMzYsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy10ZWFse2JhY2tncm91bmQ6IzAwOTY4OH0uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojM2Y2YzQxIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiMzZjZjNDF9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNiY2JjYmN9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2JjYmNiYztib3JkZXItY29sb3I6IzUyYmY1N30uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2JjYmNiYztib3JkZXItYm90dG9tLWNvbG9yOiM1MmJmNTd9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNiY2JjYmMpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzUyYmY1N30uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMTMzMjE0fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzEzMzIxNH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtZ3JlZW4gOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ncmVlbiA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWdyZWVuIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWdyZWVuIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZ3JlZW4gLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojMmU3ZDMyIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1ncmVlbiBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMmU3ZDMyIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWdyZWVuIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuNil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWdyZWVuIC50aW1lIC5zeW1ib2x7Y29sb3I6IzJlN2QzMn0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWdyZWVuIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbiAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzJlN2QzMjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDQ2LDEyNSw1MCwuMil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC42KX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojMmU3ZDMyO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNDYsMTI1LDUwLC4yKX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuNil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzJlN2QzMjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDQ2LDEyNSw1MCwuMil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMyZTdkMzJ9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg0NiwxMjUsNTAsLjIpfS5jYXBpYmFyYS5jLWdyZWVuIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzJlN2QzMjtiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC44KX0uY2FwaWJhcmEuYy1ncmVlbiAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzJlN2QzMjtjb2xvcjojMmU3ZDMyfS5jYXBpYmFyYS5jLWdyZWVuIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjgpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1ncmVlbiAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSg0NiwxMjUsNTAsLjUpfS5jYXBpYmFyYSAuYy1ncmVlbi0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMyZTdkMzIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzE5NDUxYyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWdyZWVuLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNDNiNTQ4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZ3JlZW4tLXRleHR7Y29sb3I6IzJlN2QzMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWdyZWVuLWQtLXRleHR7Y29sb3I6IzE5NDUxYyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWdyZWVuLWwtLXRleHR7Y29sb3I6IzQzYjU0OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ncmVlbntiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC4yKTtib3JkZXI6MXB4IHNvbGlkICMyZTdkMzJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ncmVlbiAubGVmdC1pY29ue2JhY2tncm91bmQ6IzJlN2QzMn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWdyZWVuIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjMmU3ZDMyO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoNDYsMTI1LDUwLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWdyZWVuIC5uYW1le2NvbG9yOiMyZTdkMzJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtZ3JlZW57LS1sb2NhbC1jb2xvcjojMmU3ZDMyOy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1ncmVlbiwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtZ3JlZW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtZ3JlZW4gLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzJlN2QzMn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ncmVlbi5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWdyZWVuLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC4yKTtib3JkZXItY29sb3I6cmdiYSg0NiwxMjUsNTAsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1ncmVlbntiYWNrZ3JvdW5kOiMyZTdkMzJ9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6Izg5YWI2MiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojODlhYjYyfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZWRlZGVjfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNlZGVkZWM7Ym9yZGVyLWNvbG9yOiNiY2RjOTd9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNlZGVkZWM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYmNkYzk3fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZWRlZGVjKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNiY2RjOTd9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzU3N2QyYX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiM1NzdkMmF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMzksMTk1LDc0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzhiYzM0YSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgxMzksMTk1LDc0LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiM4YmMzNGEhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC50aW1lIC5zeW1ib2x7Y29sb3I6IzhiYzM0YX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzhiYzM0YTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEzOSwxOTUsNzQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LWJveCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM4YmMzNGE7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMzksMTk1LDc0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM4YmMzNGE7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMzksMTk1LDc0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzhiYzM0YX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEzOSwxOTUsNzQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzhiYzM0YTtiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuOCl9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiM4YmMzNGE7Y29sb3I6IzhiYzM0YX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuOCl9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgxMzksMTk1LDc0LC41KX0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tLWJhY2tncm91bmR7YmFja2dyb3VuZDojOGJjMzRhIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM2NDkxMzAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ncmVlbi1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2IwZDY4MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLS10ZXh0e2NvbG9yOiM4YmMzNGEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ncmVlbi1kLS10ZXh0e2NvbG9yOiM2NDkxMzAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ncmVlbi1sLS10ZXh0e2NvbG9yOiNiMGQ2ODMhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtZ3JlZW57YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjIpO2JvcmRlcjoxcHggc29saWQgIzhiYzM0YX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWdyZWVuIC5sZWZ0LWljb257YmFja2dyb3VuZDojOGJjMzRhfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtZ3JlZW4gLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICM4YmMzNGE7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgxMzksMTk1LDc0LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWdyZWVuIC5uYW1le2NvbG9yOiM4YmMzNGF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtbGlnaHQtZ3JlZW57LS1sb2NhbC1jb2xvcjojOGJjMzRhOy0tbG9jYWwtY29sb3ItZm9udDojMjYzMjM4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1saWdodC1ncmVlbiwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtbGlnaHQtZ3JlZW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtbGlnaHQtZ3JlZW4gLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzhiYzM0YX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saWdodC1ncmVlbi5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtZ3JlZW4uYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saWdodC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWxpZ2h0LWdyZWVue2JhY2tncm91bmQ6IzhiYzM0YX0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNiYWM1NTAgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojYmFjNTUwfS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmM2YzZWV9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZjNmM2VlO2JvcmRlci1jb2xvcjojZTNlYjkwfS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNmM2YzZWU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZTNlYjkwfS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmM2YzZWUpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZTNlYjkwfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojODk5NTFhfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiM4OTk1MWF9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtbGltZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDUsMjIwLDU3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpbWUgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1saW1lIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtbGltZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWxpbWUgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojY2RkYzM5IWltcG9ydGFudH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWxpbWUgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDUsMjIwLDU3LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNjZGRjMzkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1saW1lIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjYpfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWxpbWUgLnRpbWUgLnN5bWJvbHtjb2xvcjojY2RkYzM5fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMDUsMjIwLDU3LC4yKX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjYpfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6I2NkZGMzOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIwNSwyMjAsNTcsLjIpfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC42KX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2NkZGMzOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIwNSwyMjAsNTcsLjIpfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2NkZGMzOX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjA1LDIyMCw1NywuMil9LmNhcGliYXJhLmMtbGltZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2NkZGMzOTtiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuOCl9LmNhcGliYXJhLmMtbGltZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojY2RkYzM5O2NvbG9yOiNjZGRjMzl9LmNhcGliYXJhLmMtbGltZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC44KX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1saW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyMDUsMjIwLDU3LC41KX0uY2FwaWJhcmEgLmMtbGltZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNjZGRjMzkhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saW1lLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojOWRhYTFlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGltZS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2RkZTc3YSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpbWUtLXRleHR7Y29sb3I6I2NkZGMzOSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpbWUtZC0tdGV4dHtjb2xvcjojOWRhYTFlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGltZS1sLS10ZXh0e2NvbG9yOiNkZGU3N2EhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGltZXtiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuMik7Ym9yZGVyOjFweCBzb2xpZCAjY2RkYzM5fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGltZSAubGVmdC1pY29ue2JhY2tncm91bmQ6I2NkZGMzOX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpbWUgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNjZGRjMzk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyMDUsMjIwLDU3LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpbWUgLm5hbWV7Y29sb3I6I2NkZGMzOX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1saW1ley0tbG9jYWwtY29sb3I6I2NkZGMzOTstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtbGltZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtbGltZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1saW1lIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNjZGRjMzl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGltZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGltZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpbWU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDIwNSwyMjAsNTcsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1saW1le2JhY2tncm91bmQ6I2NkZGMzOX0uY2FwaWJhcmEuYy15ZWxsb3c6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2JjYTI0ZiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy15ZWxsb3c6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2JjYTI0Zn0uY2FwaWJhcmEuYy15ZWxsb3c6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNlZWVkZTl9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNlZWVkZTk7Ym9yZGVyLWNvbG9yOiNlNmQxOGJ9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZWVlZGU5O2JvcmRlci1ib3R0b20tY29sb3I6I2U2ZDE4Yn0uY2FwaWJhcmEuYy15ZWxsb3c6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNlZWVkZTkpIWltcG9ydGFudH0uY2FwaWJhcmEuYy15ZWxsb3c6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNlNmQxOGJ9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojODg2ZjFkfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojODg2ZjFkfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMteWVsbG93IDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIxMiwxNzUsNTUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy15ZWxsb3cgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIxMiwxNzUsNTUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLXllbGxvdyAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMTIsMTc1LDU1LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy15ZWxsb3cgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy15ZWxsb3cgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZDRhZjM3IWltcG9ydGFudH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMteWVsbG93IHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjEyLDE3NSw1NSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZDRhZjM3IWltcG9ydGFudH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy15ZWxsb3cgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjEyLDE3NSw1NSwuNil9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy15ZWxsb3cgLnRpbWUgLnN5bWJvbHtjb2xvcjojZDRhZjM3fS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdyAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2Q0YWYzNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIxMiwxNzUsNTUsLjIpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LWJveCwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyMTIsMTc1LDU1LC42KX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6I2Q0YWYzNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIxMiwxNzUsNTUsLjIpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDIxMiwxNzUsNTUsLjYpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2Q0YWYzNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIxMiwxNzUsNTUsLjIpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNkNGFmMzd9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjEyLDE3NSw1NSwuMil9LmNhcGliYXJhLmMteWVsbG93IC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNkNGFmMzc7YmFja2dyb3VuZDpyZ2JhKDIxMiwxNzUsNTUsLjgpfS5jYXBpYmFyYS5jLXllbGxvdyAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNkNGFmMzc7Y29sb3I6I2Q0YWYzN30uY2FwaWJhcmEuYy15ZWxsb3cgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyMTIsMTc1LDU1LC44KX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLXllbGxvdyAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyMTIsMTc1LDU1LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjEyLDE3NSw1NSwuNSl9LmNhcGliYXJhIC5jLXllbGxvdy0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNkNGFmMzchaW1wb3J0YW50fS5jYXBpYmFyYSAuYy15ZWxsb3ctZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM5ZDgwMjIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy15ZWxsb3ctbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNlMmM4NzYhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy15ZWxsb3ctLXRleHR7Y29sb3I6I2Q0YWYzNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXllbGxvdy1kLS10ZXh0e2NvbG9yOiM5ZDgwMjIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy15ZWxsb3ctbC0tdGV4dHtjb2xvcjojZTJjODc2IWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXllbGxvd3tiYWNrZ3JvdW5kOnJnYmEoMjEyLDE3NSw1NSwuMik7Ym9yZGVyOjFweCBzb2xpZCAjZDRhZjM3fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMteWVsbG93IC5sZWZ0LWljb257YmFja2dyb3VuZDojZDRhZjM3fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMteWVsbG93IC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZDRhZjM3O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjEyLDE3NSw1NSwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy15ZWxsb3cgLm5hbWV7Y29sb3I6I2Q0YWYzN30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy15ZWxsb3d7LS1sb2NhbC1jb2xvcjojZDRhZjM3Oy0tbG9jYWwtY29sb3ItZm9udDojMjYzMjM4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy15ZWxsb3csLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLXllbGxvdywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy15ZWxsb3cgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2Q0YWYzN30uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy15ZWxsb3cuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyMTIsMTc1LDU1LC43KTtib3JkZXItY29sb3I6cmdiYSgyMTIsMTc1LDU1LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXllbGxvdy5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIxMiwxNzUsNTUsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXllbGxvdzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjEyLDE3NSw1NSwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjEyLDE3NSw1NSwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLXllbGxvd3tiYWNrZ3JvdW5kOiNkNGFmMzd9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2U2YjUyMCB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojZTZiNTIwfS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZjRlZmRlfS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNmNGVmZGU7Ym9yZGVyLWNvbG9yOiNmZmRiNmR9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNmNGVmZGU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZkYjZkfS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZjRlZmRlKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNmZmRiNmR9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2EwNzgwMH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiNhMDc4MDB9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWFtYmVyIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtYW1iZXIgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1hbWJlciAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTkzLDcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1hbWJlciAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWFtYmVyIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2ZmYzEwNyFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtYW1iZXIgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTkzLDcsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2ZmYzEwNyFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1hbWJlciAudGltZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMTkzLDcsLjYpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1hbWJlciAudGltZSAuc3ltYm9se2NvbG9yOiNmZmMxMDd9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1hbWJlciAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmMxMDc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTkzLDcsLjIpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuNil9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6I2ZmYzEwNztib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxOTMsNywuMil9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyNTUsMTkzLDcsLjYpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmMxMDc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTkzLDcsLjIpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZmZjMTA3fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE5Myw3LC4yKX0uY2FwaWJhcmEuYy1hbWJlciAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNmZmMxMDc7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuOCl9LmNhcGliYXJhLmMtYW1iZXIgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNmZmMxMDc7Y29sb3I6I2ZmYzEwN30uY2FwaWJhcmEuYy1hbWJlciAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC44KX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtYW1iZXIgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjU1LDE5Myw3LC41KX0uY2FwaWJhcmEgLmMtYW1iZXItLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmZjMTA3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNiYThiMDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1hbWJlci1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2ZmZDQ1NCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWFtYmVyLS10ZXh0e2NvbG9yOiNmZmMxMDchaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1hbWJlci1kLS10ZXh0e2NvbG9yOiNiYThiMDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1hbWJlci1sLS10ZXh0e2NvbG9yOiNmZmQ0NTQhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYW1iZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuMik7Ym9yZGVyOjFweCBzb2xpZCAjZmZjMTA3fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYW1iZXIgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNmZmMxMDd9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1hbWJlciAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2ZmYzEwNztib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwxOTMsNywuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1hbWJlciAubmFtZXtjb2xvcjojZmZjMTA3fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWFtYmVyey0tbG9jYWwtY29sb3I6I2ZmYzEwNzstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtYW1iZXIsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWFtYmVyLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWFtYmVyIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNmZmMxMDd9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYW1iZXIuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1hbWJlci5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYW1iZXI6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtYW1iZXJ7YmFja2dyb3VuZDojZmZjMTA3fS5jYXBpYmFyYS5jLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojZTY5MzFhIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojZTY5MzFhfS5jYXBpYmFyYS5jLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2YyZThkOX0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2YyZThkOTtib3JkZXItY29sb3I6I2ZmYzE2Nn0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNmMmU4ZDk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZjMTY2fS5jYXBpYmFyYS5jLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2YyZThkOSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2ZmYzE2Nn0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM5OTViMDB9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiM5OTViMDB9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1vcmFuZ2UgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtb3JhbmdlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLW9yYW5nZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLW9yYW5nZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLW9yYW5nZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDAhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1vcmFuZ2Ugc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2ZmOTgwMCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtb3JhbmdlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNil9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1vcmFuZ2UgLnRpbWUgLnN5bWJvbHtjb2xvcjojZmY5ODAwfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1vcmFuZ2UgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2ZmOTgwMDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxNTIsMCwuMil9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNil9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZjk4MDA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTUyLDAsLjIpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNil9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZmY5ODAwO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE1MiwwLC4yKX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZmY5ODAwfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxNTIsMCwuMil9LmNhcGliYXJhLmMtb3JhbmdlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNmZjk4MDA7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuOCl9LmNhcGliYXJhLmMtb3JhbmdlIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2ZmOTgwMDtjb2xvcjojZmY5ODAwfS5jYXBpYmFyYS5jLW9yYW5nZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuOCl9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1vcmFuZ2UgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjU1LDE1MiwwLC41KX0uY2FwaWJhcmEgLmMtb3JhbmdlLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2ZmOTgwMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLW9yYW5nZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2IzNmEwMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLW9yYW5nZS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2ZmYjc0ZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLW9yYW5nZS0tdGV4dHtjb2xvcjojZmY5ODAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtb3JhbmdlLWQtLXRleHR7Y29sb3I6I2IzNmEwMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLW9yYW5nZS1sLS10ZXh0e2NvbG9yOiNmZmI3NGQhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtb3Jhbmdle2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjIpO2JvcmRlcjoxcHggc29saWQgI2ZmOTgwMH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLW9yYW5nZSAubGVmdC1pY29ue2JhY2tncm91bmQ6I2ZmOTgwMH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLW9yYW5nZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2ZmOTgwMDtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwxNTIsMCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1vcmFuZ2UgLm5hbWV7Y29sb3I6I2ZmOTgwMH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1vcmFuZ2V7LS1sb2NhbC1jb2xvcjojZmY5ODAwOy0tbG9jYWwtY29sb3ItZm9udDojMjYzMjM4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1vcmFuZ2UsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLW9yYW5nZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1vcmFuZ2UgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2ZmOTgwMH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1vcmFuZ2UuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1vcmFuZ2UuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLW9yYW5nZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKTtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1vcmFuZ2V7YmFja2dyb3VuZDojZmY5ODAwfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNjZDU3MzMgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2NkNTczM30uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2VkZTFkZX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZWRlMWRlO2JvcmRlci1jb2xvcjojZjA5Mjc1fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZWRlMWRlO2JvcmRlci1ib3R0b20tY29sb3I6I2YwOTI3NX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2VkZTFkZSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZjA5Mjc1fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM4YTJjMGZ9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOGEyYzBmfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzAsNzQsMjUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzAsNzQsMjUsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjRhMTkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNlNjRhMTkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC42KX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnRpbWUgLnN5bWJvbHtjb2xvcjojZTY0YTE5fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZTY0YTE5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMwLDc0LDI1LC4yKX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyMzAsNzQsMjUsLjYpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlNjRhMTk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzAsNzQsMjUsLjIpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC42KX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZTY0YTE5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMwLDc0LDI1LC4yKX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2U2NGExOX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMCw3NCwyNSwuMil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZTY0YTE5O2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjgpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZTY0YTE5O2NvbG9yOiNlNjRhMTl9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuOCl9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDIzMCw3NCwyNSwuNSl9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2U2NGExOSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYTEzNDEyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1vcmFuZ2UtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNlZTgwNWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS0tdGV4dHtjb2xvcjojZTY0YTE5IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1vcmFuZ2UtZC0tdGV4dHtjb2xvcjojYTEzNDEyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1vcmFuZ2UtbC0tdGV4dHtjb2xvcjojZWU4MDVlIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtb3Jhbmdle2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjIpO2JvcmRlcjoxcHggc29saWQgI2U2NGExOX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtb3JhbmdlIC5sZWZ0LWljb257YmFja2dyb3VuZDojZTY0YTE5fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1vcmFuZ2UgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNlNjRhMTk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyMzAsNzQsMjUsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZGVlcC1vcmFuZ2UgLm5hbWV7Y29sb3I6I2U2NGExOX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1kZWVwLW9yYW5nZXstLWxvY2FsLWNvbG9yOiNlNjRhMTk7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWRlZXAtb3JhbmdlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1kZWVwLW9yYW5nZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1kZWVwLW9yYW5nZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojZTY0YTE5fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtb3JhbmdlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC43KTtib3JkZXItY29sb3I6cmdiYSgyMzAsNzQsMjUsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1vcmFuZ2UuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtb3JhbmdlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWRlZXAtb3Jhbmdle2JhY2tncm91bmQ6I2U2NGExOX0uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojNjY1ZTViIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM2NjVlNWJ9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNjN2M3Yzd9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2M3YzdjNztib3JkZXItY29sb3I6I2FmODc3OH0uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2M3YzdjNztib3JkZXItYm90dG9tLWNvbG9yOiNhZjg3Nzh9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNjN2M3YzcpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2FmODc3OH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMzkyODIyfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzM5MjgyMn0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtYnJvd24gOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1icm93biA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWJyb3duIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWJyb3duIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYnJvd24gLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojNzk1NTQ4IWltcG9ydGFudH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1icm93biBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojNzk1NTQ4IWltcG9ydGFudH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWJyb3duIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuNil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWJyb3duIC50aW1lIC5zeW1ib2x7Y29sb3I6Izc5NTU0OH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJyb3duIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93biAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6Izc5NTU0ODtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEyMSw4NSw3MiwuMil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC42KX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojNzk1NTQ4O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTIxLDg1LDcyLC4yKX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuNil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6Izc5NTU0ODtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEyMSw4NSw3MiwuMil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICM3OTU1NDh9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMjEsODUsNzIsLjIpfS5jYXBpYmFyYS5jLWJyb3duIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6Izc5NTU0ODtiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC44KX0uY2FwaWJhcmEuYy1icm93biAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6Izc5NTU0ODtjb2xvcjojNzk1NTQ4fS5jYXBpYmFyYS5jLWJyb3duIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjgpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1icm93biAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgxMjEsODUsNzIsLjUpfS5jYXBpYmFyYSAuYy1icm93bi0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM3OTU1NDghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzQ5MzMyYiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJyb3duLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYTU3ODY4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYnJvd24tLXRleHR7Y29sb3I6Izc5NTU0OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJyb3duLWQtLXRleHR7Y29sb3I6IzQ5MzMyYiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJyb3duLWwtLXRleHR7Y29sb3I6I2E1Nzg2OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1icm93bntiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC4yKTtib3JkZXI6MXB4IHNvbGlkICM3OTU1NDh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1icm93biAubGVmdC1pY29ue2JhY2tncm91bmQ6Izc5NTU0OH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJyb3duIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjNzk1NTQ4O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMTIxLDg1LDcyLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJyb3duIC5uYW1le2NvbG9yOiM3OTU1NDh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtYnJvd257LS1sb2NhbC1jb2xvcjojNzk1NTQ4Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1icm93biwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtYnJvd24sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtYnJvd24gLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6Izc5NTU0OH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1icm93bi5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJyb3duLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1icm93bjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC4yKTtib3JkZXItY29sb3I6cmdiYSgxMjEsODUsNzIsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1icm93bntiYWNrZ3JvdW5kOiM3OTU1NDh9LmNhcGliYXJhLmMtYmx1ZV9ncmV5Om5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM3Njc2NzYgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtYmx1ZV9ncmV5Om5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM3Njc2NzZ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5Om5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZGNkY2RjfS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZGNkY2RjO2JvcmRlci1jb2xvcjojOTlhZWI4fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2RjZGNkYztib3JkZXItYm90dG9tLWNvbG9yOiM5OWFlYjh9LmNhcGliYXJhLmMtYmx1ZV9ncmV5Om5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZGNkY2RjKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZV9ncmV5Om5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOTlhZWI4fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzM2NDc0Zn0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzM2NDc0Zn0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSg5NiwxMjUsMTM5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtYmx1ZV9ncmV5IDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSg5NiwxMjUsMTM5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzYwN2Q4YiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWJsdWVfZ3JleSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzYwN2Q4YiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjYpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC50aW1lIC5zeW1ib2x7Y29sb3I6IzYwN2Q4Yn0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM2MDdkOGI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg5NiwxMjUsMTM5LC4yKX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuNil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM2MDdkOGI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg5NiwxMjUsMTM5LC4yKX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSg5NiwxMjUsMTM5LC42KX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM2MDdkOGI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg5NiwxMjUsMTM5LC4yKX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjNjA3ZDhifS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDk2LDEyNSwxMzksLjIpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojNjA3ZDhiO2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC44KX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojNjA3ZDhiO2NvbG9yOiM2MDdkOGJ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuOCl9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDk2LDEyNSwxMzksLjUpfS5jYXBpYmFyYSAuYy1ibHVlX2dyZXktLWJhY2tncm91bmR7YmFja2dyb3VuZDojNjA3ZDhiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNDE1NDVlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojOGFhMmFlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LS10ZXh0e2NvbG9yOiM2MDdkOGIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlX2dyZXktZC0tdGV4dHtjb2xvcjojNDE1NDVlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LWwtLXRleHR7Y29sb3I6IzhhYTJhZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlX2dyZXl7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjIpO2JvcmRlcjoxcHggc29saWQgIzYwN2Q4Yn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWVfZ3JleSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzYwN2Q4Yn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWVfZ3JleSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzYwN2Q4Yjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDk2LDEyNSwxMzksLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZV9ncmV5IC5uYW1le2NvbG9yOiM2MDdkOGJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtYmx1ZV9ncmV5ey0tbG9jYWwtY29sb3I6IzYwN2Q4YjstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtYmx1ZV9ncmV5LC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1ibHVlX2dyZXksLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtYmx1ZV9ncmV5IC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM2MDdkOGJ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZV9ncmV5LmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ibHVlX2dyZXkuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ibHVlX2dyZXk6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1ibHVlX2dyZXl7YmFja2dyb3VuZDojNjA3ZDhifS5jYXBpYmFyYSAqLC5jYXBpYmFyYSA6YWZ0ZXIsLmNhcGliYXJhIDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fS5jYXBpYmFyYSBpbnB1dHtvdXRsaW5lOm5vbmV9LmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXXstbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkfS5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0uY2FwaWJhcmEgaW5wdXRbdHlwZT1udW1iZXJdOjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MX0uY2FwaWJhcmEgaW5wdXRbdHlwZT1udW1iZXJdOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjF9LmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5oaWRlLWRhcmssLmNhcGliYXJhOm5vdCguZGFyay10aGVtZSkgLmhpZGUtbGlnaHR7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLnRydW5jYXRle3dpZHRoOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jYXBpYmFyYSAuaGlkZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAudGV4dC10aXRsZXtmb250LXNpemU6MS4yNWVtO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW46LjVlbSAuM2VtfS5jYXBpYmFyYSAudGV4dC1zdWJ0aXRsZXtmb250LXNpemU6Ljg3NWVtO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW46LjVlbSAuM2VtO2ZsZXg6MCAwIGF1dG99LmNhcGliYXJhIC50ZXh0LWhpbnR7Zm9udC1zaXplOi43NWVtO21hcmdpbjouM2VtO3RleHQtYWxpZ246bGVmdDthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNhcGliYXJhIC50ZXh0LXN1YnRpdGxlLTJ7Zm9udC1zaXplOi43NWVtO21hcmdpbjouNWVtIC4zZW07ZmxleDowIDAgYXV0b30uY2FwaWJhcmEgLmQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXBpYmFyYSAuZC1ibG9ja3tkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYSAuZC1mbGV4e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6OTYwcHgpey5jYXBpYmFyYTpub3QoLmZvcmNlLW1vYmlsZSkgLmMtZC1kZXNrdG9wLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmE6bm90KC5mb3JjZS1tb2JpbGUpIC5jLWQtZGVza3RvcC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5jYXBpYmFyYTpub3QoLmZvcmNlLW1vYmlsZSkgLmMtZC1kZXNrdG9wLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jYXBpYmFyYTpub3QoLmZvcmNlLW1vYmlsZSkgLmMtZC1kZXNrdG9wLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NTlweCl7LmNhcGliYXJhIC5jLWQtbW9iaWxlLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1tb2JpbGUtZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kLW1vYmlsZS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1tb2JpbGUtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH19LmNhcGliYXJhLmZvcmNlLW1vYmlsZSAuYy1kLW1vYmlsZS1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmNhcGliYXJhLmZvcmNlLW1vYmlsZSAuYy1kLW1vYmlsZS1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmNhcGliYXJhLmZvcmNlLW1vYmlsZSAuYy1kLW1vYmlsZS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uY2FwaWJhcmEuZm9yY2UtbW9iaWxlIC5jLWQtbW9iaWxlLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhLmZvcmNlLW1vYmlsZSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXJ7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmF7c2Nyb2xsYmFyLXdpZHRoOmF1dG99LmNhcGliYXJhIDo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MTJweDtoZWlnaHQ6MTJweDtvcGFjaXR5Oi41fS5jYXBpYmFyYSA6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciwuY2FwaWJhcmEgOjotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jYXBpYmFyYSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JvcmRlci1yYWRpdXM6NXB4O2JhY2tncm91bmQ6Z3JleX0uY2FwaWJhcmEuZGFyay10aGVtZSA6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciwuY2FwaWJhcmEuZGFyay10aGVtZSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNre2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmNhcGliYXJhLmRhcmstdGhlbWUgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNiZGJkYmR9LmNhcGliYXJhe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDppbmhlcml0O21heC1oZWlnaHQ6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250LXNpemU6dmFyKC0tZm9udC1zaXplKX0uY2FwaWJhcmEgcHJle2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmIWltcG9ydGFudH0uY2FwaWJhcmF7Y29sb3I6IzM3NDc0ZjtiYWNrZ3JvdW5kOiNmNWY1ZjV9LmNhcGliYXJhLmRhcmstdGhlbWV7Y29sb3I6I2YwZjBmMDtiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhIC5jb250YWluZXItdGx7d2lkdGg6MTAwJTtoZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTttYXgtaGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSk7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjowO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbn0uY2FwaWJhcmEuZXh0ZW5kZWQtcmlnaHQgLmNvbnRhaW5lci10bHt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1uYXYtcmlnaHQtd2lkdGgpKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bHtiYWNrZ3JvdW5kOiNmNWY1ZjV9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bHtiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRvZGF5LWxpbmV7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudG9kYXktbGluZS5kaXNhYmxlLWxpbmUsLmNhcGliYXJhIC5jb250YWluZXItdGwgLnRvZGF5LWxpbmUuZGlzYWJsZS1saW5lOmFmdGVye2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRvZGF5LWxpbmU6YWZ0ZXJ7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpICsgMXB4KTtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2xlZnQ6MDt0b3A6MDtjb250ZW50OlxcXCJcXFwiO3dpZHRoOjJweDtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMTgzLDI4LDI4LC40KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bC5oZWFkZXItZXh0ZW5kZWQgLmNvbnRhaW5lci10bCAudG9kYXktbGluZTphZnRlcntoZWlnaHQ6Y2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkpfS5jYXBpYmFyYSAuY29ybmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDp2YXIoLS1oZWFkZXItdG9wLWhlaWdodCk7ei1pbmRleDo0O2hlaWdodDp2YXIoLS1oZWFkZXItaGVpZ2h0KTtib3JkZXI6c29saWQgcmdiYSgwLDAsMCwuNCk7Ym9yZGVyLXdpZHRoOjAgMCAycHg7cGFkZGluZy1sZWZ0OjhweH0uY2FwaWJhcmEgLmNvcm5lcjpub3QoLnJpZ2h0KXtsZWZ0OjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDt3aWR0aDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpfS5jYXBpYmFyYSAuY29ybmVyLnJpZ2h0e3JpZ2h0OjA7d2lkdGg6dmFyKC0tbmF2LXJpZ2h0LXdpZHRoKTtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5jb3JuZXI+ZGl2Om5vdChbY2xhc3NdKXt3aWR0aDppbmhlcml0O2hlaWdodDppbmhlcml0fS5jYXBpYmFyYSAuY29ybmVyIC5idG4tY29udGFpbmVye3BhZGRpbmctdG9wOi41ZW19LmNhcGliYXJhIC5jb3JuZXIgLmJ0bi1jb250YWluZXIgLmNvcm5lci1idG57Zm9udC1zaXplOi44MjVlbTttYXJnaW46MCA0cHg7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSAuY29ybmVyIC5jb3JuZXItdGl0bGV7aGVpZ2h0OmluaGVyaXQ7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmxlZnQ7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb3JuZXIgLmNvcm5lci10aXRsZSBzcGFuLmJvdHRvbS10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206OHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTU5cHgpey5jYXBpYmFyYSAuY29ybmVyIC5jb3JuZXItdGl0bGV7Zm9udC1zaXplOi43NWVtfX0uY2FwaWJhcmEgLmNvcm5lciAuaW5pdGlhbC1jb3JuZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS1uYXYtd2lkdGgpO3RvcDowO3dpZHRoOnZhcigtLWluaXRpYWwtbmF2LXdpZHRoKTtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5jb3JuZXIgLmluaXRpYWwtY29ybmVyIC5pbml0aWFsLWNvcm5lci10aXRsZXtoZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDotMXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt2ZXJ0aWNhbC1hbGlnbjp0b3A7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb3JuZXIgLmluaXRpYWwtY29ybmVyIC5pbml0aWFsLWNvcm5lci10aXRsZSAuYm90dG9tLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjhweDt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jYXBpYmFyYSAuY29ybmVyIC5pbml0aWFsLWNvcm5lciAuaW5pdGlhbC1jb3JuZXItdGl0bGUgLmJvdHRvbS1jb250YWluZXIgLml0ZW0tY29se2ZsZXg6MCAwIHZhcigtLW5hdi1pdGVtLWNvbC13aWR0aCk7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOi43NWVtfS5jYXBpYmFyYSAuY29ybmVyIC5leHRlbmQtY29ybmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpKTt0b3A6MDt3aWR0aDp2YXIoLS1leC1uYXYtd2lkdGgpO2hlaWdodDp2YXIoLS1oZWFkZXItaGVpZ2h0KTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmNvcm5lciAuZXh0ZW5kLWNvcm5lciAuZXgtY29ybmVyLXRpdGxle2hlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0Oi0xcHg7Ym94LXNpemluZzpib3JkZXItYm94O3ZlcnRpY2FsLWFsaWduOnRvcDtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmNvcm5lciAuZXh0ZW5kLWNvcm5lciAuZXgtY29ybmVyLXRpdGxlIC5ib3R0b20tY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206OHB4O3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNhcGliYXJhIC5jb3JuZXIgLmV4dGVuZC1jb3JuZXIgLmV4LWNvcm5lci10aXRsZSAuYm90dG9tLWNvbnRhaW5lciAuaXRlbS1jb2x7ZmxleDowIDAgdmFyKC0tbmF2LWl0ZW0tY29sLXdpZHRoKTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6Ljc1ZW19LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHRoOnZhcigtLWJ0bi1uYXYtd2lkdGgpO2hlaWdodDp2YXIoLS1oZWFkZXItaGVpZ2h0KTttaW4td2lkdGg6MTAwcHg7cGFkZGluZy10b3A6dmFyKC0taGVhZGVyLWxhYmVscy1oZWlnaHQpfS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlc3t0ZXh0LWFsaWduOnJpZ2h0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6dmFyKC0taGVhZGVyLWxhYmVscy1oZWlnaHQpfS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6M3B4fS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyOm5vdCgucGVyc2lzdGVudCl7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyLmlucHV0LXRpdGxlLS1hY2NlbnQgLmlucHV0LXRpdGxle2NvbG9yOiNmZmY7YmFja2dyb3VuZDpncmV5fS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyIHNwYW4uYXZlcmFnZXtmb250LXdlaWdodDo3MDA7bWFyZ2luLXJpZ2h0OjRweDtwYWRkaW5nOjNweH0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lciAuaW5wdXQtdGl0bGV7aGVpZ2h0OmNhbGModmFyKC0taGVhZGVyLWlucHV0LWhlaWdodCkgKyAzcHgpO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0taGVhZGVyLWlucHV0LWhlaWdodCkgKyAycHgpO3BhZGRpbmctcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTouNzVlbX0uY2FwaWJhcmEuZXh0ZW5kZWQtcmlnaHQgLmNvcm5lci5yaWdodHtkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciwuY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciwuY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIgLmV4dGVuZC1jb3JuZXIsLmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5pbml0aWFsLWNvcm5lcntoZWlnaHQ6Y2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpKX0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXI6bm90KC5wZXJzaXN0ZW50KXtkaXNwbGF5OnVuc2V0fS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcjpub3QoLnBlcnNpc3RlbnQpIC5hdmVyYWdlLWJveHt2aXNpYmlsaXR5OnZpc2libGV9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyOm5vdCgucGVyc2lzdGVudCkgLmlucHV0LXRpdGxle3Zpc2liaWxpdHk6dmlzaWJsZTtoZWlnaHQ6YXV0b30uY2FwaWJhcmEgLmNvcm5lcntiYWNrZ3JvdW5kOiNmMWZmZmV9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvcm5lcntiYWNrZ3JvdW5kOiMzMTNiNTA7Ym9yZGVyLWNvbG9yOnJnYmEoNjQsNzgsMTA1LC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lciAuaW5wdXQtdGl0bGV7Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjgpIWltcG9ydGFudH0uY2FwaWJhcmEgLmhlYWRlci10b3B7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtoZWlnaHQ6dmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpO3BhZGRpbmc6MCAuNWVtO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7ei1pbmRleDo1fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAuc3BhY2Vye2ZsZXg6MSAwIGF1dG99LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCBoc2xhKDAsMCUsNDMuNSUsLjMpO21hcmdpbi1yaWdodDouNWVtfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXI6bm90KDplbXB0eSl7cGFkZGluZzowfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgYnV0dG9uLnRhYntjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOi4yNWVtIDFlbTtmb250LXdlaWdodDo3MDA7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW46LjVlbSAuNWVtIDAgMDtib3JkZXItcmFkaXVzOjMwcHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciBidXR0b24udGFiOmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoMCwwLDAsLjMpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgYnV0dG9uLnRhYi5kaXNhYmxlZHtjb2xvcjpncmV5fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgYnV0dG9uLnRhYjpob3Zlcntib3JkZXItY29sb3I6Z3JleX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVye2Rpc3BsYXk6ZmxleH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyIC5sZWdlbmR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXJnaW4tcmlnaHQ6MWVtO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjhlbSAuNWVtIC41ZW0gMH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyIC5sZWdlbmQ6bm90KC5hY3RpdmUpe29wYWNpdHk6LjV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kOm5vdCguYWN0aXZlKSAuaWNvbi1sZWdlbmR7YmFja2dyb3VuZDpncmV5IWltcG9ydGFudH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyIC5sZWdlbmQgLmljb24tbGVnZW5ke3dpZHRoOi44MjVlbTtoZWlnaHQ6LjgyNWVtO21hcmdpbjoycHggLjVlbSAycHggMDtiYWNrZ3JvdW5kOmdyZXk7Ym94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czoxcHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC40KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyIC5sZWdlbmQgLmljb24tbGVnZW5kLmNpcmNsZXtib3JkZXItcmFkaXVzOjUwJX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyIC5sZWdlbmQ6aG92ZXIgc3Bhbnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIuZm9yY2UtbW9iaWxlLXN0eWxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MmVtO3RvcDoyZW07YmFja2dyb3VuZDppbmhlcml0O2NvbG9yOmluaGVyaXQ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6Njtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjQpO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMikhaW1wb3J0YW50fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIuZm9yY2UtbW9iaWxlLXN0eWxlIC5sZWdlbmR7Zm9udC1zaXplOjE2cHg7cGFkZGluZzouNWVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTU5cHgpey5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoyZW07dG9wOjJlbTtiYWNrZ3JvdW5kOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDo2O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuNCk7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKSFpbXBvcnRhbnR9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5ke2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6LjVlbX19LmNhcGliYXJhIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2YxZmZmZX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWJ7Y29sb3I6IzMxM2I1MH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWIuZGlzYWJsZWR7Y29sb3I6cmdiYSg0OSw1OSw4MCwuNSl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmhlYWRlci10b3B7YmFja2dyb3VuZDojMzEzYjUwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFie2NvbG9yOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYi5kaXNhYmxlZHtjb2xvcjpoc2xhKDAsMCUsMTAwJSwuNCl9LmNhcGliYXJhIC5jb3JuZXItZm9vdGVye3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtsZWZ0OjA7Ym90dG9tOjA7ei1pbmRleDozO3dpZHRoOmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTttYXJnaW4tYm90dG9tOmNhbGModmFyKC0taXRlbS1oZWlnaHQpKi0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmNhcGliYXJhIC5jb3JuZXItZm9vdGVyIC5jb3JuZXItdGl0bGV7bGluZS1oZWlnaHQ6MzBweDtoZWlnaHQ6aW5oZXJpdDtkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246bGVmdDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgLmNvcm5lci1mb290ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29ybmVyLWZvb3RlcntiYWNrZ3JvdW5kOiMzMTNiNTA7Y29sb3I6I2YwZjBmMDtib3JkZXItY29sb3I6cmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYSBuYXYucmlnaHR7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6Y2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTtvdmVyZmxvdy15OnNjcm9sbDtvdmVyZmxvdy14OmhpZGRlbjt6LWluZGV4OjU7ZGlzcGxheTpub25lO2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZWR9LmNhcGliYXJhIG5hdi5yaWdodCwuY2FwaWJhcmEgbmF2LnJpZ2h0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2LnJpZ2h0IC5uYXYtaXRlbXt3aWR0aDp2YXIoLS1uYXYtcmlnaHQtd2lkdGgpfS5jYXBpYmFyYSBuYXYucmlnaHQgLm5hdi1pbnB1dC1jb250YWluZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIG5hdi5yaWdodCAubmF2LWlucHV0LWNvbnRhaW5lciAuYnV0dG9uLXNlY3Rpb257cGFkZGluZy1ib3R0b206Ljc1ZW07cGFkZGluZy10b3A6Ljc1ZW07cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2JvdHRvbTowfS5jYXBpYmFyYSBuYXYubGVmdHttaW4taGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpKTtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7bGVmdDowO3dpZHRoOmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7aGVpZ2h0OmF1dG87ei1pbmRleDoyO2JvcmRlci1yaWdodDoxcHggc29saWQgI2IwYmVjNTtvdmVyZmxvdzp2aXNpYmxlO2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2LmxlZnQgLm5hdi1pdGVte3dpZHRoOnZhcigtLW5hdi13aWR0aCl9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW17bWluLXdpZHRoOjI1MHB4O21heC13aWR0aDo1MDBweDt3aWR0aDotd2Via2l0LW1heC1jb250ZW50O3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7bWluLWhlaWdodDo3MHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6M3JlbTt0b3A6MDtib3JkZXI6MXB4IHNvbGlkIGdyZXk7ei1pbmRleDo0O2JvcmRlci1yYWRpdXM6NXB4O3BhZGRpbmc6MTZweDt0cmFuc2l0aW9uOmFsbCAuM3MgZWFzZTtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoLjVyZW0gKyB2YXIoLS1pdGVtLWhlaWdodCkpKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbS50by1ib3R0b217dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYygtMTAwJSAtIC41cmVtKSl9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1kZXRhaWwgLmRldGFpbC10aXRsZXtmb250LXNpemU6MS4xMjVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTo4cHg7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjgwcHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1kZXRhaWwgLmRldGFpbC1zdWJ0aXRsZXtmb250LXNpemU6Ljg3NTttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWRldGFpbCAuaGVhZGVyLWNoaXB7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTZweDt0b3A6MTZweDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyOjNweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6NXB4fS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5kZXRhaWwtY29udGFpbmVyPmRpdnttYXJnaW46NnB4IDB9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0e3dpZHRoOnZhcigtLWluaXRpYWwtbmF2LXdpZHRoKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLW5hdi13aWR0aCk7dG9wOjA7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDozNHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tdGl0bGV7ZmxleDoxIDAgYXV0bztwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbCwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29se2ZsZXg6MCAwIHZhcigtLW5hdi1pdGVtLWNvbC13aWR0aCk7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0e3BhZGRpbmc6MH0uY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD4uaG91ci1pbnB1dCwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD4uaG91ci1pbnB1dHtmb250LXNpemU6Ljg3NWVtO3dpZHRoOmNhbGMoMTAwJSAtIDhweCk7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDoyNHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0e3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW07d2lkdGg6Y2FsYygxMDAlIC0gOHB4KTtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjRweDttYXJnaW46OHB4IDRweCA0cHg7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3VzLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdHt3aWR0aDp2YXIoLS1leC1uYXYtd2lkdGgpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpKTt0b3A6MDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0sLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVte2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiMGJlYzU7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjEuNzVyZW19LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLXRpdGxlLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS10aXRsZXtmbGV4OjEgMCBhdXRvO3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2x7ZmxleDowIDAgdmFyKC0tbmF2LWl0ZW0tY29sLXdpZHRoKTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXR7cGFkZGluZzowfS5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0e3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW07d2lkdGg6Y2FsYygxMDAlIC0gOHB4KTtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjRweDttYXJnaW46OHB4IDRweCA0cHg7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3VzLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3R7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpKTt3aWR0aDp2YXIoLS1idG4tbmF2LXdpZHRoKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtvdmVyZmxvdzpoaWRkZW59LmNhcGliYXJhIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLWNoaWxkLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnQsLmNhcGliYXJhIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnR7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTt3aWR0aDppbmhlcml0O3BhZGRpbmc6NHB4IDZweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O3RleHQtYWxpZ246cmlnaHR9LmNhcGliYXJhIG5hdi5sZWZ0IC5uYXYtaXRlbS10b3RhbC1mb290ZXJ7cGFkZGluZy10b3A6M3B4fS5jYXBpYmFyYSBuYXYgLmNhcC1idG4tbmF2LWl0ZW0ucGFyZW50LC5jYXBpYmFyYSBuYXYgLmV4LW5hdi1pdGVtLnBhcmVudCwuY2FwaWJhcmEgbmF2IC5pbml0aWFsLW5hdi1pdGVtLnBhcmVudCwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1jb250YWluZXIucGFyZW50e2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4xKX0uY2FwaWJhcmEgbmF2IC5jYXAtYnRuLW5hdi1pdGVtLnBhcmVudD4uaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2IC5leC1uYXYtaXRlbS5wYXJlbnQ+Lml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAuaW5pdGlhbC1uYXYtaXRlbS5wYXJlbnQ+Lml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tY29udGFpbmVyLnBhcmVudD4uaXRlbS10aXRsZXttYXgtd2lkdGg6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpIC0gNjBweCk7d2lkdGg6YXV0b30uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbXttaW4taGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCl9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbnt0cmFuc2l0aW9uOmFsbCAuNXMgZWFzZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO3dpZHRoOjM0cHg7ZmxleDowIDAgMzRweDtmb250LXNpemU6MS41ZW07dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uOmZvY3VzLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbjpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb257ZmxleDowIDAgMzRweDtmb250LXNpemU6MS4xMjVlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6NDBweDttYXJnaW4tdG9wOjEycHh9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbiBwYXRoLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24gcGF0aHt3aWR0aDoyMHB4O2hlaWdodDoyMHB4fS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZXtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6Z3JpZDtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjM0cHg7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuZnVsbC13aWR0aCwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmZ1bGwtd2lkdGh7ZmxleDoxIDAgYXV0bztkaXNwbGF5OmZsZXg7ei1pbmRleDoyO21pbi13aWR0aDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkgLSA0MHB4KTt3aWR0aDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkgLSA0MHB4KX0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrZWFibGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5jbGlja2VhYmxle2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuY2xpY2tlYWJsZTpob3ZlciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrZWFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjIpIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuaG92ZXJhYmxlOmhvdmVyLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuaG92ZXJhYmxlOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuaXRlbS10aXRsZS1jb250ZW50LC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLml0ZW0tdGl0bGUtY29udGVudHtmbGV4OjEgMSBhdXRvfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTU5cHgpey5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuY2xpY2stbGFiZWwtdG8tZGV0YWlsIC5pdGVtLXRpdGxlLWNvbnRlbnQsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5jbGljay1sYWJlbC10by1kZXRhaWwgLml0ZW0tdGl0bGUtY29udGVudHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIWltcG9ydGFudH19LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi1jb250YWluZXIsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi1jb250YWluZXJ7ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO3RleHQtYWxpZ246cmlnaHR9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0biwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRue21hcmdpbi1sZWZ0OjJyZW07aGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MXJlbTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjoxcHggc29saWQ7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZTouODc1ZW07cGFkZGluZzo0cHggOHB4O2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTB9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bjpob3ZlciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb257bWFyZ2luLWxlZnQ6LjVyZW07cGFkZGluZzoycHggNnB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb24gLmNsb3NlLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZSAuZGV0YWlsLWJ0bi5kZXRhaWwtYnRuLWljb24gLmluZm8tb3V0bGluZS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG4uZGV0YWlsLWJ0bi1pY29uIC5jbG9zZS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG4uZGV0YWlsLWJ0bi1pY29uIC5pbmZvLW91dGxpbmUtaWNvbntkaXNwbGF5OmlubGluZS1mbGV4fS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG4uZGV0YWlsLWJ0bi1pY29uIC5jbG9zZS1pY29uIHN2ZywuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLmRldGFpbC1idG4taWNvbiAuaW5mby1vdXRsaW5lLWljb24gc3ZnLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUgLmRldGFpbC1idG4uZGV0YWlsLWJ0bi1pY29uIC5jbG9zZS1pY29uIHN2ZywuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlIC5kZXRhaWwtYnRuLmRldGFpbC1idG4taWNvbiAuaW5mby1vdXRsaW5lLWljb24gc3Zne3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9LmNhcGliYXJhLmZvcmNlLW1vYmlsZSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuY2xpY2stbGFiZWwtdG8tZGV0YWlsIC5pdGVtLXRpdGxlLWNvbnRlbnR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY2FwaWJhcmEgbmF2IC5tdWx0aWJ1dHRvbnMtYnRue2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Y29sb3I6Izk5OTtmb250LXNpemU6MS41ZW07Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjM4cHg7bWF4LWhlaWdodDozOHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNhcGliYXJhIG5hdiAubXVsdGlidXR0b25zLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuMil9LmNhcGliYXJhLmV4dGVuZGVkLXJpZ2h0IG5hdi5yaWdodHtkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgbmF2LmxlZnR7bWluLWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpKX0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIG5hdi5yaWdodHt0b3A6Y2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSArIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpKTtoZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgLSB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkgLSB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhIG5hdi5sZWZ0LC5jYXBpYmFyYSBuYXYucmlnaHQsLmNhcGliYXJhIG5hdi5yaWdodCAuYnV0dG9uLXNlY3Rpb257YmFja2dyb3VuZDojZmFmYWZhfS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVte2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yKTtiYWNrZ3JvdW5kOiNmZmZ9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLnJlZC1saWdodHtib3JkZXItY29sb3I6I2Y4NDc0N30uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAueWVsbG93LWxpZ2h0e2JvcmRlci1jb2xvcjojZmRkODM1fS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC5ncmVlbi1saWdodHtib3JkZXItY29sb3I6IzM4OTkzZH0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29ue2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbiwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29ue2NvbG9yOnJnYmEoNTUsNzEsNzksLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5yaWdodCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYucmlnaHQgLmJ1dHRvbi1zZWN0aW9ue2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdHtiYWNrZ3JvdW5kOiMyMjI4Mzc7Ym9yZGVyLWNvbG9yOnJnYmEoNjQsNzgsMTA1LC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVte2JvcmRlci1jb2xvcjojNDA0ZTY5O2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcHtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLnJlZC1saWdodHtib3JkZXItY29sb3I6I2FhMWExYX0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC55ZWxsb3ctbGlnaHR7Ym9yZGVyLWNvbG9yOiNmYmNkMDB9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAuZ3JlZW4tbGlnaHR7Ym9yZGVyLWNvbG9yOiMzODhlM2N9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW17Ym9yZGVyLWNvbG9yOnJnYmEoNjQsNzgsMTA1LC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0e2JhY2tncm91bmQ6IzQwNGU2OTtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3QgLmNhcC1idG4tY2hpbGQtbmF2LWl0ZW0gLmNhcC1idG4tbmF2LWl0ZW0tY29udGVudCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuY2FwLWJ0bi1uYXYtbGlzdCAuY2FwLWJ0bi1uYXYtaXRlbSAuY2FwLWJ0bi1uYXYtaXRlbS1jb250ZW50LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoNjQsNzgsMTA1LC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbiwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbntjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbiwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb257Y29sb3I6aHNsYSgwLDAlLDk0LjElLC4yKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXJ7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO3dpZHRoOi13ZWJraXQtZml0LWNvbnRlbnQ7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudDt0b3A6MDttaW4td2lkdGg6MTAwJTtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7ei1pbmRleDozO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGdyZXk7Ym94LXNpemluZzpib3JkZXItYm94O2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMil9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVke2hlaWdodDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0e3BhZGRpbmc6MXB4IDA7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdDpub3QoLnBlcnNpc3RlbnQpe2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3Q+ZGl2e3dpZHRoOnZhcigtLWRheS13aWR0aCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0PmRpdj5zcGFue2Rpc3BsYXk6YmxvY2s7d2lkdGg6aW5oZXJpdDtsaW5lLWhlaWdodDp2YXIoLS1oZWFkZXItaW5wdXQtaGVpZ2h0KTtoZWlnaHQ6dmFyKC0taGVhZGVyLWlucHV0LWhlaWdodCk7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi44NzVlbX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dHt3aWR0aDppbmhlcml0O2hlaWdodDp2YXIoLS1oZWFkZXItaW5wdXQtaGVpZ2h0KTtib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuNSk7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi44NzVlbX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2hlaWdodDp2YXIoLS1oZWFkZXItbGFiZWxzLWhlaWdodCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyIC5oZWFkZXItaXRlbXtwYWRkaW5nOjZweCA4cHg7bWluLXdpZHRoOnZhcigtLWl0ZW0tbWluLXdpZHRoKTtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXIgLmhlYWRlci1pdGVtIHNwYW4uYm90dG9tLXRleHR7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTo4cHg7d2lkdGg6MTAwJX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpb3tkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDotd2Via2l0LW1heC1jb250ZW50O3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLmFnbm97cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MzJweDtmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDo0cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lc2Vze2Rpc3BsYXk6YmxvY2s7ZGlzcGxheTpmbGV4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpb3tkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6dmFyKC0tZGF5LXdpZHRoKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lc3tkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7cGFkZGluZy1sZWZ0Oi41ZW07cGFkZGluZy1yaWdodDoyZW07Zm9udC1zaXplOi44NzVlbTttYXJnaW4tdG9wOjZweH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZHt3aWR0aDp2YXIoLS1kYXktd2lkdGgpO21heC13aWR0aDp2YXIoLS1kYXktd2lkdGgpO292ZXJmbG93OmhpZGRlbn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZC5tZXMtcmVkdWNlZC0ye3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSoyKTttYXgtd2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjIpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkLm1lcy1yZWR1Y2VkLTN7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjMpO21heC13aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqMyl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQubWVzLXJlZHVjZWQtNHt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqNCk7bWF4LXdpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSo0KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZCAubWVzLWxhYmVse3dpZHRoOi13ZWJraXQtbWF4LWNvbnRlbnQ7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZDphZnRlcntjb250ZW50OlxcXCJcXFwiO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LHJlZCk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDtoZWlnaHQ6MTAwJTt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkvMil9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFze2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjVweH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlve3dpZHRoOnZhcigtLWRheS13aWR0aCk7aGVpZ2h0OnZhcigtLWhlYWRlci1kYXktaGVpZ2h0KTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Zm9udC1zaXplOi44NzVlbTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjRweCA2cHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5pcy1jbGlja2VhYmxle2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaGFzLWFsZXJ0OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO3JpZ2h0OjA7dG9wOjA7Ym9yZGVyLWNvbG9yOnJlZCByZWQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo2cHg7ei1pbmRleDoxfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvbnRhaW5lci10bCBoZWFkZXJ7aGVpZ2h0OmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdDpub3QoLnBlcnNpc3RlbnQpe2Rpc3BsYXk6ZmxleH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjFmZmZlO2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2YxZmZmZSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby53ZWVrZW5ke2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSk7Y29sb3I6IzI2MzIzOH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLnRvZGF5e2JhY2tncm91bmQ6cmdiYSgyMjksNTcsNTMsLjkpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5hY3RpdmV7YmFja2dyb3VuZDpncmVlbjtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaXMtY2xpY2tlYWJsZTpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuNCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5pcy1jbGlja2VhYmxlOmFjdGl2ZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuNil9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXQsLmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IGRpdj5zcGFue2NvbG9yOiMzMTNiNTB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojMzEzYjUwO2NvbG9yOiNmMGYwZjA7Ym9yZGVyLWNvbG9yOnJnYmEoNjQsNzgsMTA1LC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCMzMTNiNTApfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpb3tib3JkZXItY29sb3I6cmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby53ZWVrZW5ke2JhY2tncm91bmQ6IzIyMjgzNztjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby50b2RheXtiYWNrZ3JvdW5kOnJnYmEoMTgzLDI4LDI4LC42KTtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDU2LDE0Miw2MCwuNik7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaXMtY2xpY2tlYWJsZTpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuNCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmlzLWNsaWNrZWFibGU6YWN0aXZle2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCBkaXY+c3Bhbntjb2xvcjpoc2xhKDAsMCUsMTAwJSwuOCkhaW1wb3J0YW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXR7YmFja2dyb3VuZDpyZ2JhKDY0LDc4LDEwNSwuNik7Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjgpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzMxM2I1MH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjIpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC5wbG90LXZlcnRpY2FsLWNvbnRhaW5lcntoZWlnaHQ6MDt3aWR0aDowO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAucGxvdC12ZXJ0aWNhbC1jb250YWluZXIgLnBsb3QtdmVydGljYWx7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zKTt3aWR0aDp2YXIoLS1kYXktd2lkdGgpO2hlaWdodDpjYWxjKDEwMHZoIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgLSB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAucGxvdC12ZXJ0aWNhbC1jb250YWluZXIgLnBsb3QtdmVydGljYWwucmFpbntiYWNrZ3JvdW5kOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNTNkZWcscmdiYSgzLDE1NSwyMjksLjIpLHJnYmEoMywxNTUsMjI5LC4yKSA1cHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCAxMnB4KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAucGxvdC1ob3Jpem9udGFsLWNvbnRhaW5lcntoZWlnaHQ6MDt3aWR0aDowO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAucGxvdC1ob3Jpem9udGFsLWNvbnRhaW5lciAucGxvdC1ob3Jpem9udGFse2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMyk7d2lkdGg6MTAwdnc7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtaG9yaXpvbnRhbC1jb250YWluZXIgLnBsb3QtaG9yaXpvbnRhbC5wbG90LXBhcmVudHtiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuMSl9LmNhcGliYXJhIC5jb250YWluZXItdGwuZXh0ZW5kZWQtcmlnaHQgLmNvbnRhaW5lci10bCAucGxvdC1jb250YWluZXIgLnBsb3QtdmVydGljYWx7aGVpZ2h0OmNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpICsgdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBmb290ZXJ7d2lkdGg6LXdlYmtpdC1maXQtY29udGVudDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50O2JvdHRvbTowO21pbi13aWR0aDoxMDAlO2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O3otaW5kZXg6Mjtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmNhcGliYXJhIC5jb250YWluZXItdGwgZm9vdGVyIC5mb290ZXItY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MTAwJTtkaXNwbGF5OmZsZXh9LmNhcGliYXJhIC5jb250YWluZXItdGwgZm9vdGVyIC5mb290ZXItY29udGFpbmVyIC5mb290ZXItaXRlbXtwYWRkaW5nOjEwcHggMnB4O3dpZHRoOnZhcigtLWRheS13aWR0aCk7Y3Vyc29yOmRlZmF1bHQ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3RleHQtYWxpZ246Y2VudGVyfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGZvb3RlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bC5kYXJrLXRoZW1lIGZvb3RlcntiYWNrZ3JvdW5kOiMzMTNiNTA7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuaGFzLW1vYmlsZS1mb290ZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2FwaWJhcmEuaGFzLW1vYmlsZS1mb290ZXIgLmNvbnRhaW5lci10bHtmbGV4OjE7bWluLWhlaWdodDowO21hcmdpbi1ib3R0b206dmFyKC0tbW9iaWxlLWZvb3Rlci1oZWlnaHQpfS5jYXBpYmFyYSAubW9iaWxlLWZvb3Rlcntwb3NpdGlvbjpmaXhlZDtib3R0b206MDt6LWluZGV4OjI7d2lkdGg6MTAwJTtmbGV4LXNocmluazowO2hlaWdodDp2YXIoLS1tb2JpbGUtZm9vdGVyLWhlaWdodCk7bWluLWhlaWdodDp2YXIoLS1tb2JpbGUtZm9vdGVyLWhlaWdodCk7cGFkZGluZzouNWVtIDFlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDouNWVtO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2FwaWJhcmEgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItY29udGVudHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDouNWVtO2ZsZXg6MX0uY2FwaWJhcmEgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItYnV0dG9uc3tkaXNwbGF5OmZsZXg7Z2FwOi41ZW07YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1sZWZ0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1idXR0b25ze21hcmdpbi1sZWZ0OjB9fS5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDouNWVtO3dpZHRoOmF1dG87bWluLXdpZHRoOmF1dG87cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luOjA7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMzUpO2JvcmRlcjpub25lfS5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xlIC5tb2JpbGUtZm9vdGVyLXNlbGVjdC1jb3VudCwuY2FwaWJhcmEgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItc2VsZWN0LXRvZ2dsZSAubW9iaWxlLWZvb3Rlci1zZWxlY3QtbGFiZWx7Zm9udC1zaXplOi44NzVlbTt3aGl0ZS1zcGFjZTpub3dyYXB9LmNhcGliYXJhIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLWJ0biwuY2FwaWJhcmEgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItY2FuY2Vse2ZsZXgtc2hyaW5rOjA7Ym9yZGVyOm5vbmV9LmNhcGliYXJhIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLWJ0bi1oaWRkZW57ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLm1vYmlsZS1mb290ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xle2JhY2tncm91bmQ6IzFlNzlkMyFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmUhaW1wb3J0YW50O2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jYXBpYmFyYSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xlIHN2Z3tmaWxsOiNmZmZ9LmNhcGliYXJhLmRhcmstdGhlbWUgLm1vYmlsZS1mb290ZXJ7YmFja2dyb3VuZDojMzEzYjUwO2NvbG9yOiNmMGYwZjA7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSg2NCw3OCwxMDUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5tb2JpbGUtZm9vdGVyIC5tb2JpbGUtZm9vdGVyLXNlbGVjdC10b2dnbGV7YmFja2dyb3VuZDojMWU3OWQzIWltcG9ydGFudDtjb2xvcjojZmZmIWltcG9ydGFudH0uY2FwaWJhcmEuZGFyay10aGVtZSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1idG4sLmNhcGliYXJhLmRhcmstdGhlbWUgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItY2FuY2Vse2JvcmRlcjpub25lO2NvbG9yOiNmZmZ9LmNhcGliYXJhLmRhcmstdGhlbWUgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItYnRuIHN2ZywuY2FwaWJhcmEuZGFyay10aGVtZSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1jYW5jZWwgc3Zne2ZpbGw6I2ZmZn0uY2FwaWJhcmEuZGFyay10aGVtZSAubW9iaWxlLWZvb3RlciAubW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xle2JhY2tncm91bmQ6IzM4OGUzYyFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmUhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmNhcGliYXJhLmRhcmstdGhlbWUgLm1vYmlsZS1mb290ZXIgLm1vYmlsZS1mb290ZXItc2VsZWN0LXRvZ2dsZSBzdmd7ZmlsbDojZmZmfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7dG9wOnZhcigtLWhlYWRlci1oZWlnaHQpO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW5hdi13aWR0aCkgLSB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgLSB2YXIoLS1leC1uYXYtd2lkdGgpIC0gdmFyKC0tYnRuLW5hdi13aWR0aCkpO21heC1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLWhlaWdodCkpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSk7bWFyZ2luLXRvcDotMXB4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZGF5LW1vdXNlLW92ZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOnZhcigtLWRheS13aWR0aCk7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3JkZXI6M3B4IHNvbGlkIHJnYmEoMjQ1LDEyNCwwLC41KTtib3gtc2hhZG93OjAgMCAycHggI2Y1N2MwMCxpbnNldCAwIDAgM3B4ICNmNTdjMDA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjFzIGVhc2U7b3ZlcmZsb3c6dmlzaWJsZTt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kYXktbW91c2Utb3ZlcjphZnRlciwuY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kYXktbW91c2Utb3ZlcjphZnRlcnt3aWR0aDp2YXIoLS1kYXktd2lkdGgpO2hlaWdodDoxMDB2aDtyaWdodDotNHB4O2JvdHRvbTpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KSAtIDJweCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kYXktbW91c2Utb3ZlcjpiZWZvcmV7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTt3aWR0aDoxMDB2dztyaWdodDpjYWxjKHZhcigtLWRheS13aWR0aCkgLSAycHgpO2JvdHRvbTotNHB4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuYmFja2dyb3VuZC1ncmlke3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSoyMCk7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpKjIwKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjFweDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7YmFja2dyb3VuZC1zaXplOnZhcigtLWRheS13aWR0aCkgdmFyKC0taXRlbS1oZWlnaHQpLGNhbGModmFyKC0tZGF5LXdpZHRoKSo3KSB2YXIoLS1pdGVtLWhlaWdodCksY2FsYyh2YXIoLS1kYXktd2lkdGgpKjcpIHZhcigtLWl0ZW0taGVpZ2h0KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZyxyZ2JhKDgwLDgwLDgwLC4zKSAxcHgsdHJhbnNwYXJlbnQgMCksbGluZWFyLWdyYWRpZW50KDBkZWcscmdiYSg4MCw4MCw4MCwuMykgMXB4LHRyYW5zcGFyZW50IDApLGxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCBjYWxjKHZhcigtLWRheS13aWR0aCkqNSkscmdiYSg4MCw4MCw4MCwuMSkgMCk7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsMCAwLDAgMH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRyYXctYm94e3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZHJhdy1ib3ggY2FudmFze3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MH0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb250YWluZXItdGwgLnRhYmxle3RvcDpjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpfS5jYXBpYmFyYSAuc2VsZWN0LWNvbnRhaW5lcntvdmVyZmxvdzp2aXNpYmxlO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDowO2hlaWdodDowfS5jYXBpYmFyYSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5ey0tc2VsZWN0ZWQtZGF5LXB1bHNlLWNvbG9yOnJnYmEoMjAwLDg1LDU3LDAuNik7LS1zZWxlY3RlZC1kYXktcHVsc2UtY29sb3ItbWlkOnJnYmEoMjAwLDg1LDU3LDAuNzUpOy0tc2VsZWN0ZWQtZGF5LXB1bHNlLWNvbG9yLXN0cm9uZzpyZ2JhKDIwMCw4NSw1NywwLjkpOy0tc2VsZWN0ZWQtZGF5LXB1bHNlLWdsb3c6cmdiYSgyMDAsODUsNTcsMC4zNSk7LS1zZWxlY3RlZC1kYXktcHVsc2UtZ2xvdy1taWQ6cmdiYSgyMDAsODUsNTcsMC4xOCk7LS1zZWxlY3RlZC1kYXktcHVsc2UtaW5zZXQ6aHNsYSgwLDAlLDc0LjElLDAuOCk7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6aHNsYSgwLDAlLDc0LjElLC40KTtib3gtc2hhZG93Omluc2V0IDAgMCA1cHggdmFyKC0tc2VsZWN0ZWQtZGF5LXB1bHNlLWluc2V0KTtib3JkZXI6MnB4IHNvbGlkIHZhcigtLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvcik7LXdlYmtpdC1hbmltYXRpb246cHVsc2VTZWxlY3RlZERheSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTthbmltYXRpb246cHVsc2VTZWxlY3RlZERheSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZX0uY2FwaWJhcmEgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheVtjYXAtYmFkZ2VdOmFmdGVye2NvbnRlbnQ6YXR0cihjYXAtYmFkZ2UpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTNweDt0b3A6LTNweDtiYWNrZ3JvdW5kOiMxNTY1YzA7Zm9udC1zaXplOi43NWVtO2NvbG9yOiNmZmY7d2lkdGg6MS41ZW07aGVpZ2h0OjEuNWVtO2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6Mjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDA7cGFkZGluZzoycHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhLmRhcmstdGhlbWUgLnNlbGVjdGVkLWRheXstLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvcjpyZ2JhKDAsMjU1LDM0LDAuNSk7LS1zZWxlY3RlZC1kYXktcHVsc2UtY29sb3ItbWlkOnJnYmEoMCwyNTUsMzQsMC43NSk7LS1zZWxlY3RlZC1kYXktcHVsc2UtZ2xvdy1taWQ6cmdiYSgwLDI1NSwzNCwwLjE4KTstLXNlbGVjdGVkLWRheS1wdWxzZS1jb2xvci1zdHJvbmc6cmdiYSgwLDI1NSwzNCwwLjk1KTstLXNlbGVjdGVkLWRheS1wdWxzZS1nbG93OnJnYmEoMCwyNTUsMzQsMC41KTstLXNlbGVjdGVkLWRheS1wdWxzZS1pbnNldDpoc2xhKDAsMCUsNzQuMSUsMC44KX0uY2FwaWJhcmEgLmRldGFpbC1kYXl7bWluLWhlaWdodDo1MHB4O3dpZHRoOi13ZWJraXQtZml0LWNvbnRlbnQ7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudDtib3JkZXI6MXB4IHNvbGlkIGdyZXk7cGFkZGluZzouNzVlbTtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7bWFyZ2luOjAgMCAwIDFlbTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNoYWRvdzowIDZweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDEwcHggMTRweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgNHB4IDE4cHggM3B4IHJnYmEoMCwwLDAsLjEyKTtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjVweDt0cmFuc2l0aW9uOmFsbCAuM3MgZWFzZTt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sbGVmdCx0b3A7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvMiotMSkpO3otaW5kZXg6NDtvcGFjaXR5OjF9LmNhcGliYXJhIC5kZXRhaWwtZGF5OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7YmFja2dyb3VuZDppbmhlcml0O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMXB4O3RvcDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yICsgN3B4KTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3JkZXItY29sb3I6Z3JleTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMCAxcHggMXB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheS5kZC1oaWRle2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLXJpZ2h0LWFycm93e21hcmdpbjowIDE2cHggMCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTEwMCUgLSAyMHB4IC0gdmFyKC0tZGF5LXdpZHRoKSkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvMiotMSkpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtcmlnaHQtYXJyb3c6YWZ0ZXJ7Ym9yZGVyLXdpZHRoOjFweCAxcHggMCAwO2xlZnQ6dW5zZXQ7cmlnaHQ6LTExcHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1jZWlsLWFycm93e3RyYW5zZm9ybTp0cmFuc2xhdGVZKC03cHgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtY2VpbC1hcnJvdzphZnRlcnt0b3A6NnB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtY2VpbC1hcnJvdy5oYXMtcmlnaHQtYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtMTAwJSAtIDIwcHggLSB2YXIoLS1kYXktd2lkdGgpKSkgdHJhbnNsYXRlWSgtN3B4KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWNlaWwtYXJyb3cuaGFzLXJpZ2h0LWFycm93OmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTExcHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1taWRkbGUtYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYygtNTAlICsgdmFyKC0taXRlbS1oZWlnaHQpLzIpKX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLW1pZGRsZS1hcnJvdzphZnRlcnt0b3A6Y2FsYyg1MCUgLSAxMHB4KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLW1pZGRsZS1hcnJvdy5oYXMtcmlnaHQtYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtMTAwJSAtIDIwcHggLSB2YXIoLS1kYXktd2lkdGgpKSkgdHJhbnNsYXRlWShjYWxjKC01MCUgKyB2YXIoLS1pdGVtLWhlaWdodCkvMikpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtbWlkZGxlLWFycm93Lmhhcy1yaWdodC1hcnJvdzphZnRlcntsZWZ0OnVuc2V0O3JpZ2h0Oi0xMXB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtYm90dG9tLWFycm93e3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoLTEwMCUgKyB2YXIoLS1pdGVtLWhlaWdodCkpKX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWJvdHRvbS1hcnJvdzphZnRlcnt0b3A6dW5zZXQ7Ym90dG9tOjRweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWJvdHRvbS1hcnJvdy5oYXMtcmlnaHQtYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtMTAwJSAtIDIwcHggLSB2YXIoLS1kYXktd2lkdGgpKSkgdHJhbnNsYXRlWShjYWxjKC0xMDAlICsgdmFyKC0taXRlbS1oZWlnaHQpKSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1ib3R0b20tYXJyb3cuaGFzLXJpZ2h0LWFycm93OmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTExcHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5oZWFkZXItZGV0YWlsIC50aXRsZXtmb250LXNpemU6MS4yNWVtO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOi4yNWVtO21pbi13aWR0aDoxMGVtO21heC13aWR0aDoyMGVtO2xpbmUtaGVpZ2h0OnVuc2V0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuaGVhZGVyLWRldGFpbCAuc3VidGl0bGV7Zm9udC1zaXplOi44NzVlbTttYXJnaW4tYm90dG9tOjhweDttaW4td2lkdGg6MTBlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlse21hcmdpbjowO2ZsZXg6MSAxIGF1dG99LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbHttYXJnaW46MDtmb250LXNpemU6Ljg3NWVtO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6LjVlbSAuNWVtIC41ZW0gMWVtO2JvcmRlci1yYWRpdXM6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOnVuc2V0O2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAubGVmdC1pY29ue3dpZHRoOjhweDtoZWlnaHQ6OHB4O21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50O2xlZnQ6MXB4O3RvcDoxMHB4O2JvcmRlci1yYWRpdXM6NTAlfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi5kaWFtb25ke2JvcmRlci1yYWRpdXM6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBza2V3KDEwZGVnLDEwZGVnKX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24ub3V0bGluZWR7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24udHJpYW5nbGV7Ym9yZGVyLXJhZGl1czowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNrZXcoMTBkZWcsMTBkZWcpIHRyYW5zbGF0ZSgzcHgsM3B4KTt3aWR0aDowO2hlaWdodDowO2JvcmRlci13aWR0aDo1cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAubGVmdC1pY29uLnNoaWVsZHt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JvcmRlci1yYWRpdXM6MCAwIDUwJSA1MCV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAubmFtZXtmbGV4OjAgMSA0MCU7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206MDtwYWRkaW5nLXJpZ2h0OjFlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9ue2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdGFydH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNje2Rpc3BsYXk6ZmxleDttYXJnaW4tYm90dG9tOjNweDthbGlnbi1pdGVtczpiYXNlbGluZX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjLmRlc2MtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdGFydDt3aWR0aDoxMDAlO2JvcmRlci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctYm90dG9tOjB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYy5kZXNjLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjLmRlc2MtY29sdW1uIC5sYWJlbHttYXJnaW4tcmlnaHQ6MH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIC5sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjEgMSA2NSU7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1yaWdodDouNWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MgLnZhbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bWFyZ2luLWxlZnQ6MWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MgLnByZWZpeCwuY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIC5zdWZmaXh7Zm9udC1zaXplOi44NWVtO2ZsZXg6MCAwIGF1dG99LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAudmFsdWU6bm90KGVtcHR5KXttYXJnaW4tcmlnaHQ6LjJlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIHN1cHt0b3A6LTFlbSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5jb2x1bW4tZmxleHttYXgtaGVpZ2h0OjYwdmg7LW1vei1jb2x1bW4tY291bnQ6Mjtjb2x1bW4tY291bnQ6MjstbW96LWNvbHVtbi1nYXA6MjBweDtjb2x1bW4tZ2FwOjIwcHg7LW1vei1jb2x1bW4tZmlsbDpiYWxhbmNlO2NvbHVtbi1maWxsOmJhbGFuY2V9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5jb2x1bW4tZmxleC5zaW5nbGUtaXRlbXstbW96LWNvbHVtbi1jb3VudDoxO2NvbHVtbi1jb3VudDoxfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuZmxleHtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZmxvdzp3cmFwOy1tcy13cml0aW5nLW1vZGU6dGItbHI7d3JpdGluZy1tb2RlOnZlcnRpY2FsLWxyO21heC1oZWlnaHQ6MjUlfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuZmxleCAuaXRlbS1kZXRhaWx7ZmxleDowIDAgYXV0bzttaW4td2lkdGg6OGVtOy1tcy13cml0aW5nLW1vZGU6bHItdGI7d3JpdGluZy1tb2RlOmhvcml6b250YWwtdGJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5jb2x1bW57LW1vei1jb2x1bW5zOjdlbSAzO2NvbHVtbnM6N2VtIDM7bWluLXdpZHRoOjMwZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5jb2x1bW4gLml0ZW0tZGV0YWlse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWx7bWFyZ2luOjRweDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi41ZW0gMWVtO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW59LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwgLm5hbWV7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206LjVlbTtjb2xvcjp2YXIoLS1sb2NhbC1jb2xvci1mb250LGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIC5sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDo3MDB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbnttaW4taGVpZ2h0OjEwcHg7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24udHJpYW5nbGV7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi5zaGllbGR7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixncmV5KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmVsZW1lbnRzLWRldGFpbHtwYWRkaW5nOi41ZW0gMCAuMjVlbTtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWwgLm5hbWV7ZmxleDoxIDAgMTAwJTtmb250LXdlaWdodDo3MDB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWwgLmVsZW1lbnRzLWxpc3R7bWFyZ2luOjRweCAtNHB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5lbGVtZW50cy1saXN0IC5lbGVtZW50LWRldGFpbHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOi4yNWVtIC44NzVlbTtib3JkZXItcmFkaXVzOjNweDtjb2xvcjojZmZmO21hcmdpbjouMjVlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmFsZXJ0e3BhZGRpbmc6LjVlbSAwIC4yNWVtIDJlbTtwb3NpdGlvbjpyZWxhdGl2ZTttaW4td2lkdGg6MTVlbTttaW4td2lkdGg6MTBlbTttYXgtd2lkdGg6MzBlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmFsZXJ0IC5hbGVydC1pY29ue21heC13aWR0aDoyZW07Zm9udC1zaXplOjEuNzVlbTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOi41ZW07Y29sb3I6Z3JleX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmFsZXJ0IC5yZWR7Y29sb3I6I2Y0NDMzNn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXJ7bWFyZ2luOjAgLS43OGVtIC0uNzVlbTtib3JkZXI6MXB4IHNvbGlkIGdyZXk7ei1pbmRleDoyfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciBwcmV7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d2hpdGUtc3BhY2U6LW1vei1wcmUtd3JhcDt3aGl0ZS1zcGFjZTotcHJlLXdyYXA7d2hpdGUtc3BhY2U6LW8tcHJlLXdyYXA7d29yZC13cmFwOmJyZWFrLXdvcmR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2p7bWluLXdpZHRoOjEwZW07bWF4LXdpZHRoOjMwZW07bWFyZ2luOjAgMCAuNWVtO3BhZGRpbmc6Ljc1ZW07Zm9udC1zaXplOi44NzVlbX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgLm1zai1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi4yNWVtIC41ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlsIC5lbWFpbHtmb250LXNpemU6Ljg3NWVtO2ZvbnQtc3R5bGU6aXRhbGljO29wYWNpdHk6LjV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlsIC5kYXRle2ZvbnQtc2l6ZTouNzI1ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5e2NvbG9yOiMzNzQ3NGY7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYSAuZGV0YWlsLWRheSwuY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsLC5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmRlc2MtY29sdW1uLC5jYXBpYmFyYSAuZGV0YWlsLWRheTphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMil9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWwgLmVsZW1lbnRzLWxpc3QgLmVsZW1lbnQtZGV0YWlse2JhY2tncm91bmQ6cmdiYSg1NSw3MSw3OSwuOCl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZWNiMztib3JkZXItY29sb3I6I2ZmY2EyOH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgLm1zai1kZXRhaWx7YmFja2dyb3VuZDojZmZlMDgyO2JvcmRlci1jb2xvcjojZmZjYTI4fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5e2NvbG9yOiNmMGYwZjA7Ym9yZGVyLWNvbG9yOiM0MDRlNjk7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5OmFmdGVye2JvcmRlci1jb2xvcjojNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWx7YmFja2dyb3VuZDp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmNhcGliYXJhLmRhcmstdGhlbWUgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuZGVzYy1jb2x1bW57Ym9yZGVyLWNvbG9yOiM0MDRlNjl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmRldGFpbC1kYXkgLmVsZW1lbnRzLWRldGFpbCAuZWxlbWVudHMtbGlzdCAuZWxlbWVudC1kZXRhaWx7YmFja2dyb3VuZDojMjkzMjQzfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVye2JhY2tncm91bmQ6IzI5MzI0Mztib3JkZXItY29sb3I6cmdiYSgyNTEsMTkyLDQ1LC40KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqLWRldGFpbHtiYWNrZ3JvdW5kOnJnYmEoMjUxLDE5Miw0NSwuMSl9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7ei1pbmRleDoxMDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sbGVmdCx0b3B9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lci5jbS1oaWRlIC5jYXAtY29udGV4dC1tZW51e3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MH0uY2FwaWJhcmEgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51e3Bvc2l0aW9uOmFic29sdXRlO21pbi13aWR0aDoyNTBweDt6LWluZGV4OjI7Ym9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpO2ZvbnQtc2l6ZTouNzVlbTt0cmFuc2l0aW9uOmFsbCAuMXMgbGluZWFyO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7cGFkZGluZzouNGVtIDA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbXtwYWRkaW5nOi41ZW0gMWVtO2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudV9pdGVtOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMCwuMil9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudV9pdGVtLmlzLWRpc2FibGVke29wYWNpdHk6LjU7Y3Vyc29yOnVuc2V0fS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbS5pcy1kaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudV9pdGVtLmlzLWRpdmlkZXJ7Y3Vyc29yOnVuc2V0O2hlaWdodDowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjAsMjAsMjAsLjIpO3BhZGRpbmc6MDttYXJnaW46LjNlbSAxZW19LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudV9pdGVtX2ljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleDowIDAgYXV0bztwYWRkaW5nLXJpZ2h0Oi41ZW19LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudV9pdGVtX2ljb24gc3Zne3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHh9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudXtjb2xvcjojMzc0NzRmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yKTtiYWNrZ3JvdW5kOiNmZmZ9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudSBzdmcgcGF0aHtmaWxsOiMzNzQ3NGZ9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51e2NvbG9yOiNmMGYwZjA7Ym9yZGVyLWNvbG9yOiM0MDRlNjk7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudSBzdmcgcGF0aHtmaWxsOiNmMGYwZjB9LmNhcGliYXJhIC5ob3VyLWlucHV0e2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjNweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHg7bWFyZ2luOjhweCA0cHg7b3ZlcmZsb3c6aGlkZGVufS5jYXBpYmFyYSAuaG91ci1pbnB1dCBpbnB1dHt3aWR0aDo1MCU7aGVpZ2h0OmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5ob3VyLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLmhvdXItaW5wdXQgaW5wdXQ6Zm9jdXN7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKX0uY2FwaWJhcmEgLmhvdXItaW5wdXQgc3Bhbnt3aWR0aDo4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC5ob3VyLWlucHV0IC5oaHt0ZXh0LWFsaWduOnJpZ2h0fS5jYXBpYmFyYSAudGltZXtib3JkZXItcmFkaXVzOjZweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MH0uY2FwaWJhcmEgLnRpbWUgLnN5bWJvbHtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6YXV0bzt3aWR0aDoyMHB4O2ZvbnQtc2l6ZToycmVtO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOmNlbnRlcn0uY2FwaWJhcmEgLnRpbWUgaW5wdXR7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjJweCBzb2xpZCB0cmFuc3BhcmVudDt3aWR0aDo2MnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToycmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246YWxsIC4xcyBlYXNlO291dGxpbmU6bm9uZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O3BhZGRpbmc6NnB4fS5jYXBpYmFyYSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC50aW1lIGlucHV0OmZvY3Vze3RyYW5zZm9ybTpzY2FsZSgxLjA2KX0uY2FwaWJhcmEgLnRpbWUgaW5wdXQ6aW52YWxpZHtib3JkZXI6MnB4IHNvbGlkIHJlZH0uY2FwaWJhcmEgLmJ1dHRvbnMtZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30uY2FwaWJhcmEgLmJ1dHRvbnMtZ3JvdXAgYnV0dG9uLmNhcC1idG4tb3V0bGluZXtib3JkZXItcmFkaXVzOjA7bWFyZ2luOjAgLTJweCAwIDB9LmNhcGliYXJhIC5idXR0b25zLWdyb3VwIGJ1dHRvbi5jYXAtYnRuLW91dGxpbmU6Zmlyc3Qtb2YtdHlwZXtib3JkZXItcmFkaXVzOjZweCAwIDAgNnB4O21hcmdpbi1sZWZ0OjRweH0uY2FwaWJhcmEgLmJ1dHRvbnMtZ3JvdXAgYnV0dG9uLmNhcC1idG4tb3V0bGluZTpsYXN0LW9mLXR5cGV7Ym9yZGVyLXJhZGl1czowIDZweCA2cHggMDttYXJnaW4tcmlnaHQ6NHB4fS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7ZmxleC13cmFwOm5vd3JhcDtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwO2JvcmRlcjpzb2xpZCBncmV5O2JvcmRlci13aWR0aDoycHggMnB4IDB9LmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciAuaW5wdXQtYm94LXRhYntmbGV4OjEgMSBhdXRvO3BhZGRpbmc6LjNlbSAxZW07Zm9udC1zaXplOi45ZW07Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCBncmV5O2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIgLmlucHV0LWJveC10YWIuYWN0aXZle2JhY2tncm91bmQ6aHNsYSgwLDAlLDU4LjglLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVyIC5pbnB1dC1ib3gtdGFiOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmV9LmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lcisuaW5wdXQtYm94e2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHh9LmNhcGliYXJhIC5pbnB1dC1ib3h7bWFyZ2luOjAgMTZweDttaW4taGVpZ2h0OjE4MHB4O2JvcmRlcjoycHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjZweDtvdmVyZmxvdy15OnNjcm9sbDtwYWRkaW5nLWJvdHRvbTo2MHB4O3dpZHRoOjEwMCU7bWF4LWhlaWdodDozMDBweH0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lcntwYWRkaW5nOi4zZW07bWF4LXdpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgaHNsYSgwLDAlLDM5LjIlLC4zKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lciAuc2VhcmNoLWlucHV0e2JvcmRlcjoxcHggc29saWQgIzY0NjQ2NDtib3JkZXItcmFkaXVzOjEzcHg7aGVpZ2h0OjI2cHg7cGFkZGluZzouNWVtIDFlbTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTouOGVtO2NvbG9yOmluaGVyaXR9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXIgLnNlYXJjaC1pbnB1dDotbW96LXBsYWNlaG9sZGVyLXNob3duKy5zZWFyY2gtaW5wdXQtY2xlYXJ7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyKy5zZWFyY2gtaW5wdXQtY2xlYXJ7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQ6cGxhY2Vob2xkZXItc2hvd24rLnNlYXJjaC1pbnB1dC1jbGVhcntkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXIgLnNlYXJjaC1pbnB1dC1jbGVhcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxZW07dG9wOi40ZW07Y29sb3I6aHNsYSgwLDAlLDM5LjIlLC42KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb257cGFkZGluZzouNWVtIDJlbSAuNWVtIC41ZW07dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgaHNsYSgwLDAlLDM5LjIlLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLmhhcy1pY29ue3BhZGRpbmc6LjVlbSAyZW0gLjVlbSAxLjVlbX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLmNsaWNrZWFibGV7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5jbGlja2VhYmxlOmhvdmVyIGxhYmVse2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5pcy10aXRsZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuMSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5pcy10aXRsZSAubWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZXtvcGFjaXR5Oi42fS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MS41ZW07ZGlzcGxheTpub25lO3BhZGRpbmc6LjVlbTttYXJnaW46MWVtO2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czozcHg7ei1pbmRleDoyO2JveC1zaGFkb3c6MCAycHggNXB4IHJnYmEoMCwwLDAsLjMpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2ZvbnQtc2l6ZTouODc1ZW07YWxpZ24taXRlbXM6YmFzZWxpbmV9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGVze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7bWF4LXdpZHRoOjEwMCU7ZmxleDowIDEgYXV0b30uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmVuZDtmbGV4OjEgMCBhdXRvO2ZvbnQtc2l6ZToxZW07cGFkZGluZzowIC41ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tc3VidGl0bGUsLmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dW5zZXQ7bWF4LXdpZHRoOjEwMCU7ZmxleC1ncm93OjF9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tc3VidGl0bGV7Zm9udC1zaXplOi44NzVlbX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1zdWZmaXh7ZmxleDowIDAgYXV0bztmb250LXNpemU6Ljg3NWVtO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi41ZW07dG9wOi43NWVtO3dpZHRoOi43NWVtO2hlaWdodDouNzVlbTtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGdyZXkpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjMpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWxpbmt7b3BhY2l0eTouNjtjb2xvcjojMjE5NmYzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi41ZW07dG9wOi43NWVtfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWxpbmsgc3Zne3dpZHRoOjE4cHghaW1wb3J0YW50O2hlaWdodDoxOHB4IWltcG9ydGFudH0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uOmhvdmVyIC5taW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXB7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0e3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjRlbTttYXJnaW4tcmlnaHQ6LjVlbTtib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMik7Zm9udC1zaXplOjFlbTtmbGV4OjAgMCA0ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1mb290ZXJ7bWFyZ2luLXRvcDouMjVlbTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNhcGliYXJhIHNlbGVjdC5pbnB1dC1zZWxlY3R7cGFkZGluZzouM2VtIDFlbTt3aWR0aDoxMDAlO2ZsZXg6MSAwIDEwMCU7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjstd2Via2l0LWFwcGVhcmFuY2U6YXV0bzstbW96LWFwcGVhcmFuY2U6YXV0bzthcHBlYXJhbmNlOmF1dG99LmNhcGliYXJhIHNlbGVjdC5pbnB1dC1zZWxlY3Qgb3B0aW9ue3BhZGRpbmc6LjNlbTtjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6aW5oZXJpdH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24tbGlzdHttYXJnaW46MTZweCAwfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi1saXN0IC5pbnB1dC1zZWN0aW9uLXRpdGxle21hcmdpbi1ib3R0b206OHB4fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi1saXN0IC5pbnB1dC1zZWN0aW9ue21hcmdpbjowIDE2cHggOHB4fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbnttYXJnaW46MTZweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi50by1yaWdodHthbGlnbi1pdGVtczplbmR9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLnRvLWxlZnR7YWxpZ24taXRlbXM6c3RhcnR9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5zbWFsbC1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDt0b3A6LTEwcHg7d2lkdGg6MS4yZW07aGVpZ2h0OjEuMmVtO2ZvbnQtc2l6ZTouOWVtO2JvcmRlcjoxcHggc29saWQgI2ZmZjtib3gtc2hhZG93OjFweCAxcHggMnB4IHJnYmEoMCwwLDAsLjQpO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNmZmY7YmFja2dyb3VuZDpyZWQ7Ym9yZGVyLXJhZGl1czo1MCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuaW5wdXQtc2VjdGlvbi10aXRsZXtmbGV4OjEgMSAxMDAlO3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuaW5wdXQtc2VjdGlvbi10aXRsZSBidXR0b257bWFyZ2luLWxlZnQ6YXV0bztmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuaW5wdXQtc2VjdGlvbi1saW5re2ZsZXg6MSAxIDEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmJhc2VsaW5lO3BhZGRpbmctdG9wOi4yNWVtfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuaW5wdXQtc2VjdGlvbi1saW5rIGF7Y29sb3I6IzIxOTZmMzttYXJnaW4tdG9wOi43NXJlbX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24uaXMtaW52YWxpZCAuaW5wdXQtYm94LC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5pcy1pbnZhbGlkIGlucHV0Lm5hdi1pbnB1dHtib3JkZXI6MnB4IHNvbGlkIHJlZCFpbXBvcnRhbnQ7Ym94LXNoYWRvdzowIDAgM3B4IHJlZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLmRlbnNlIGlucHV0Lm5hdi1pbnB1dHt3aWR0aDo1MCU7Zm9udC1zaXplOjFlbTtwYWRkaW5nOjNweCA2cHh9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXI6MnB4IHNvbGlkIGhzbGEoMCwwJSw1MC4yJSwuNyk7Ym9yZGVyLXJhZGl1czo2cHg7d2lkdGg6MTAwJTttaW4td2lkdGg6MTMwcHg7bWF4LXdpZHRoOjE3MHB4O2ZvbnQtc2l6ZToyZW07dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHggNnB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7b3V0bGluZTpub25lO3RyYW5zaXRpb246YWxsIC4xcyBlYXNlO21hcmdpbi1ib3R0b206OHB4fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyOjJweCBzb2xpZCBncmV5O2JveC1zaGFkb3c6MCA0cHggNnB4IGhzbGEoMCwwJSw1MC4yJSwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dC5zbWFsbHtmb250LXNpemU6MS4zZW19LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZXtib3JkZXI6MnB4IHNvbGlkIGhzbGEoMCwwJSw1MC4yJSwuNyk7Ym9yZGVyLXJhZGl1czo2cHg7d2lkdGg6NzAlO21pbi13aWR0aDoxMzBweDtwYWRkaW5nOjNweCA2cHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtvdXRsaW5lOm5vbmU7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2U7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1c3tib3JkZXI6MnB4IHNvbGlkIGdyZXk7Ym94LXNoYWRvdzowIDRweCA2cHggaHNsYSgwLDAlLDUwLjIlLC4yKX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlIGxhYmVse2ZsZXg6MSAxIGF1dG99LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSBpbnB1dFt0eXBlPWZpbGVde2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tY29se3dpZHRoOmF1dG87cG9zaXRpb246cmVsYXRpdmU7ZmxleDoxIDEgMTAlfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuaW5wdXQtc2VjdGlvbi1jb2wgaW5wdXQubmF2LWlucHV0e21pbi13aWR0aDp1bnNldDt3aWR0aDpjYWxjKDEwMCUgLSAxcmVtKTttYXgtd2lkdGg6N3JlbX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7b3V0bGluZTpub25lO2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoycHggc29saWQgZ3JleTt3aWR0aDoxMDAlO21pbi13aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO21pbi1oZWlnaHQ6MTAwcHg7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2U7cGFkZGluZzo4cHg7Ym94LXNpemluZzpib3JkZXItYm94fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE2MCwwLC4yKX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXRbdHlwZT1jaGVja2JveF17d2lkdGg6MThweDtoZWlnaHQ6MThweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNhcGliYXJhIC50aW1le2JvcmRlcjoycHggc29saWQgcmdiYSgwLDEyOCwwLC43KTtjb2xvcjpncmVlbn0uY2FwaWJhcmEgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEgLnRpbWUgaW5wdXR7Y29sb3I6IzM3NDc0Zn0uY2FwaWJhcmEgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6Z3JlZW47Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDEyOCwwLC4yKX0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVyLC5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIgLmlucHV0LWJveC10YWJ7Ym9yZGVyLWNvbG9yOmdyZWVufS5jYXBpYmFyYSAuaW5wdXQtYm94e2NvbG9yOiMzNzQ3NGY7Ym9yZGVyOjJweCBzb2xpZCBncmVlbn0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6I2ZhZmFmYX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe2JhY2tncm91bmQ6I2ZhZmFmYTtjb2xvcjojMzc0NzRmO2JvcmRlcjoxcHggc29saWQgIzM3NDc0Zn0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtjb2xvcjojMzc0NzRmO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDEyOCwwLC43KX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyOjJweCBzb2xpZCBncmVlbjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTI4LDAsLjIpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0IG9wdGlvbntiYWNrZ3JvdW5kOiNmYWZhZmE7Y29sb3I6IzM3NDc0Zn0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Y29sb3I6IzM3NDc0Zjtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwxMjgsMCwuNyl9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlcjoycHggc29saWQgZ3JlZW47Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDEyOCwwLC4yKX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNDksMTk2LC42KTtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjQpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgyNTUsMjQ5LDE5NiwuOCk7Ym94LXNoYWRvdzowIDRweCA2cHggdHJhbnNwYXJlbnR9LmNhcGliYXJhLmRhcmstdGhlbWUgLnRpbWV7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDY0LDc4LDEwNSwuNyk7Y29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC50aW1lIGlucHV0e2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNDA0ZTY5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjQsNzgsMTA1LC4yKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveC10YWItY29udGFpbmVyIC5pbnB1dC1ib3gtdGFie2JvcmRlci1jb2xvcjojNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3h7Y29sb3I6I2YwZjBmMDtib3JkZXI6MnB4IHNvbGlkICM0MDRlNjl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0e2JhY2tncm91bmQ6IzQwNGU2OTtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXB7YmFja2dyb3VuZDojMjIyODM3O2NvbG9yOiNmMGYwZjA7Ym9yZGVyOjFweCBzb2xpZCAjZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Y29sb3I6I2YwZjBmMDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoNjQsNzgsMTA1LC43KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlcjoycHggc29saWQgIzQwNGU2OTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDY0LDc4LDEwNSwuMil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCBvcHRpb257YmFja2dyb3VuZDojMjIyODM3O2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtjb2xvcjojZjBmMGYwO2JvcmRlcjoycHggc29saWQgcmdiYSg2NCw3OCwxMDUsLjcpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlcjoycHggc29saWQgIzQwNGU2OTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDY0LDc4LDEwNSwuMil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7YmFja2dyb3VuZDpyZ2JhKDI1MSwxOTIsNDUsLjEpO2JvcmRlcjoycHggc29saWQgIzllOWU5ZTtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjUxLDE5Miw0NSwuMyk7Ym94LXNoYWRvdzowIDRweCA2cHggaHNsYSgwLDAlLDYyJSwuMil9LmNhcGliYXJhIGJ1dHRvbntvdXRsaW5lOm5vbmU7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIGJ1dHRvbi5jYXAtcm90YXRlIC5tZGk6YmVmb3JlLC5jYXBpYmFyYSBidXR0b24uY2FwLXJvdGF0ZSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uOmZvY3VzLC5jYXBpYmFyYSAuY2FwLWJ0bi1vdXRsaW5lOmZvY3VzLC5jYXBpYmFyYSAuY2FwLWJ0bi1yYWlzZWQ6Zm9jdXMsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlOmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoMCwwLDAsLjMpfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uOmRpc2FibGVkLC5jYXBpYmFyYSAuY2FwLWJ0bi1vdXRsaW5lOmRpc2FibGVkLC5jYXBpYmFyYSAuY2FwLWJ0bi1yYWlzZWQ6ZGlzYWJsZWQsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlOmRpc2FibGVke29wYWNpdHk6LjZ9LmNhcGliYXJhIGJ1dHRvbi5jYXAtYnRuLXNte2ZvbnQtc2l6ZTouNzVlbTttYXJnaW46NHB4O3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZXtjdXJzb3I6cG9pbnRlcjtjb2xvcjpncmV5O2JvcmRlcjoycHggc29saWQgZ3JleTtwYWRkaW5nOjhweCAxNnB4O21hcmdpbjowIDhweDtib3JkZXItcmFkaXVzOjZweDtmb250LXdlaWdodDo3MDB9LmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpncmV5fS5jYXBpYmFyYSAuY2FwLWJ0bi1yYWlzZWR7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzo4cHggMTZweDttYXJnaW46MCA4cHg7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDpncmV5O2JvcmRlcjoycHggc29saWQgZ3JleTtmb250LXdlaWdodDo3MDB9LmNhcGliYXJhIC5jYXAtYnRuLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjMycHg7d2lkdGg6MzJweDtvdXRsaW5lOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDoxNnB4O21hcmdpbi10b3A6NHB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7cGFkZGluZzo0cHg7Zm9udC1zaXplOjE4cHg7Y29sb3I6Z3JleTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbiBzdmd7ZmlsbDpncmV5fS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taGFzLWJhZGdlOmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotLjJlbTt0b3A6LS4yZW07d2lkdGg6LjhlbTtoZWlnaHQ6LjhlbTtiYWNrZ3JvdW5kOmdyZXk7Ym9yZGVyLXJhZGl1czo1MCV9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOm5vbmV9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmV7Ym9yZGVyOjFweCBzb2xpZCBncmV5fS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4tdG9nZ2xlLXNpZGViYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MTBweDt6LWluZGV4OjI7bWFyZ2luOjB9LmNhcGliYXJhIC5jYXAtYnRuLWljb24gLm1kaXtmb250LXNpemU6MjRweH0uY2FwaWJhcmEgLmNhcC1idG4taWNvbiAubG9hZGluZy1pY29ue2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjB9LmNhcGliYXJhIC5jYXAtYnRuLWljb24ubG9hZGluZz46bm90KC5sb2FkaW5nLWljb24pe2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5sb2FkaW5nIC5sb2FkaW5nLWljb257ZGlzcGxheTp1bnNldH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtvdXRsaW5lOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjo0cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Zm9udC1zaXplOjE0cHh9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlIC5tZGl7Zm9udC1zaXplOjI0cHh9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xle3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjpub25lO3BhZGRpbmc6MH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjJweDt0b3A6MnB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6Z3JleTt3aWR0aDoyMnB4O2hlaWdodDoyMnB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZSBzcGFue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MXB4O3RvcDo2cHg7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5le3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjpub25lO3BhZGRpbmc6MH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MnB4O3RvcDozcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjJweCBzb2xpZCBncmV5O3dpZHRoOjIycHg7aGVpZ2h0OjIycHh9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmUgc3Bhbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjFweDt0b3A6NnB4O3dpZHRoOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6Z3JleTt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9we3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjpub25lO3BhZGRpbmc6MH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9wOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7dG9wOjA7Ym9yZGVyLXJhZGl1czowIDUwJSA1MCUgNTAlO2JhY2tncm91bmQ6Z3JleTt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTJweCw0cHgpIHJvdGF0ZSg0NWRlZyl9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcCBzcGFue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6NnB4O3dpZHRoOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaWJhcmEuZXh0ZW5kZWQtcmlnaHQgW3RvZ2dsZS1zaWRlYmFyLXJpZ2h0XSBzdmcsLmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCBbdG9nZ2xlLWhlYWRlcl0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2FwaWJhcmEgLmNhcC1idG4tcmFpc2Vke2JhY2tncm91bmQ6IzAwZjtib3JkZXI6MnB4IHNvbGlkICMwMGY7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjoycHggc29saWQgIzAwZjtjb2xvcjojMDBmfS5jYXBpYmFyYSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6IzAwZjtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZXtjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZSwuY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9we2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlOmJlZm9yZSwuY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9wOmJlZm9yZXtiYWNrZ3JvdW5kOiMzODhlM2N9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLmlzLWVtcHR5OmJlZm9yZSwuY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9wLmlzLWVtcHR5OmJlZm9yZXtiYWNrZ3JvdW5kOiM2MTYxNjF9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmU6YmVmb3Jle2JvcmRlci1jb2xvcjojMzg4ZTNjfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lIHNwYW57Y29sb3I6IzM3NDc0Zn0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWhhcy1iYWRnZTphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC44KX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2Vke2JhY2tncm91bmQ6cmdiYSg4NCwxMTAsMTIyLC4xKTtib3JkZXItY29sb3I6IzU0NmU3YTtjb2xvcjojNTQ2ZTdhfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWQ6YWN0aXZle2JhY2tncm91bmQ6IzU0NmU3YX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmZvY3VzLC5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWQ6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDg0LDExMCwxMjIsLjMpfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5le2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOiM1NDZlN2E7Y29sb3I6IzU0NmU3YX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTphY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDg0LDExMCwxMjIsLjMpfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5lOmZvY3VzLC5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5lOmhvdmVye2JhY2tncm91bmQ6cmdiYSg4NCwxMTAsMTIyLC4xKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7YmFja2dyb3VuZDojNDA0ZTY5O2JvcmRlcjoycHggc29saWQgI2YwZjBmMDtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MnB4IHNvbGlkICNmMGYwZjA7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6IzQwNGU2OTtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcHtjb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlOmJlZm9yZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3A6YmVmb3Jle2JhY2tncm91bmQ6IzJlN2QzMn0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS5pcy1lbXB0eTpiZWZvcmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9wLmlzLWVtcHR5OmJlZm9yZXtiYWNrZ3JvdW5kOiM2MTYxNjF9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMyZTdkMzJ9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbiwuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lIHNwYW57Y29sb3I6aHNsYSgwLDAlLDk0LjElLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taGFzLWJhZGdlOmFmdGVye2JhY2tncm91bmQ6cmdiYSg1NiwxNDIsNjAsLjgpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZHtiYWNrZ3JvdW5kOmhzbGEoMCwwJSw5NC4xJSwuMSk7Ym9yZGVyLWNvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCk7Y29sb3I6aHNsYSgwLDAlLDk0LjElLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWQ6YWN0aXZle2JhY2tncm91bmQ6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDk0LjElLC4zKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5le2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCk7Y29sb3I6aHNsYSgwLDAlLDk0LjElLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5lOmFjdGl2ZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSw5NC4xJSwuMSl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5lOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDk0LjElLDApfS5jYXBpYmFyYSBbY2FwLXRvb2x0aXBde3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXBpYmFyYSBbY2FwLXRvb2x0aXBdOmhvdmVyOmJlZm9yZXtwYWRkaW5nOjhweDtvcGFjaXR5OjE7Ym9yZGVyLXdpZHRoOjFweDtoZWlnaHQ6YXV0b30uY2FwaWJhcmEgW2NhcC10b29sdGlwXTpiZWZvcmV7b3BhY2l0eTouMztoZWlnaHQ6MDtwYWRkaW5nOjAgOHB4O3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwO3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDEwMCUgKyAxOHB4KTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRleCgtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjcpO2JvcmRlcjowIHNvbGlkICMwMDA7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtjb250ZW50OmF0dHIoY2FwLXRvb2x0aXApO3RleHQtdHJhbnNmb3JtOm5vbmU7bWluLXdpZHRoOjEwMHB4O3otaW5kZXg6NX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXJ7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MDtoZWlnaHQ6MH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXI6aG92ZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLWNvbnRhaW5lciAubG9uZy1iYXJ7b3BhY2l0eTouM30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveHtwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6ZGVmYXVsdDt3aWxsLWNoYW5nZTpkaXNwbGF5fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5mbG9hdC1ib3gtY29udGVudHt3aWR0aDp2YXIoLS1kYXktd2lkdGgpO21heC13aWR0aDp2YXIoLS1kYXktd2lkdGgpO21pbi13aWR0aDp2YXIoLS1kYXktd2lkdGgpO2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7bWF4LWhlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7bWluLWhlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoxfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5mbG9hdC1ib3gtY29udGVudHtvdmVyZmxvdzpoaWRkZW59LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3hbZGF0YS1pcy12aXNpYmxlPWZhbHNlXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94OmhvdmVye3otaW5kZXg6Mn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3ZlcisuZmxvYXQtYm94LWV4dCAubG9uZy1iYXJ7ei1pbmRleDoyO29wYWNpdHk6MX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuaWNvbi1tZXNzYWdle3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6Mjt0b3A6LTNweDtyaWdodDotMnB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7YmFja2dyb3VuZDojZmZlYjNiO2NvbG9yOiM0ZTM0MmU7ZmlsbDojNGUzNDJlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkICNmZmViM2J9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmljb24tbWVzc2FnZSBzdmd7bWFyZ2luOjA7dG9wOjA7cG9zaXRpb246YWJzb2x1dGV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3guaGFzLWVycm9yczpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjdweDtoZWlnaHQ6N3B4O2xlZnQ6MXB4O3RvcDoxcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZDMyZjJmO3otaW5kZXg6Mn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC5oYXMtZXJyb3JzLnRyaWFuZ2xlLXVwOmJlZm9yZXtsZWZ0OjJweDt3aWR0aDowO2hlaWdodDowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZSgycHgsMnB4KTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWNvbG9yOiM2NGRkMTcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzY0ZGQxNztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjRweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Lmhhcy1lcnJvcnMudHJpYW5nbGUtZG93bjpiZWZvcmV7bGVmdDoycHg7d2lkdGg6MDtoZWlnaHQ6MDt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpIHRyYW5zbGF0ZSgycHgsMnB4KTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWNvbG9yOiNkMzJmMmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2QzMmYyZjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjRweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLWJvdHRvbSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci1taWRkbGUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItdG9we3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO292ZXJmbG93OnZpc2libGU7aGVpZ2h0OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItdG9we3RvcDoxcHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItdG9wIC5kb3R7Ym9yZGVyLXJhZGl1czowIDAgNTAlIDUwJX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci1taWRkbGV7dG9wOmNhbGMoNTAlIC0gNHB4KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci1ib3R0b217Ym90dG9tOjVweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci1ib3R0b20gLmRvdHtib3JkZXItcmFkaXVzOjAgMCA1MCUgNTAlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3R7d2lkdGg6OHB4O21pbi13aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW46MXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxvY2FsLWNvbG9yLGhzbGEoMCwwJSwxMDAlLC44KSk7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMzkuMiUsLjUpKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmRpYW1vbmR7Ym9yZGVyLXJhZGl1czowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNrZXcoMTBkZWcsMTBkZWcpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3Qub3V0bGluZWR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LnRyaWFuZ2xle3dpZHRoOjA7aGVpZ2h0OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2tldygxMGRlZywxMGRlZykgdHJhbnNsYXRlKDFweCwxcHgpO2JvcmRlci1sZWZ0OjVweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMzkuMiUsLjgpKTtib3JkZXItYm90dG9tOjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6NXB4IHNvbGlkIHZhcigtLWxvY2FsLWNvbG9yLGhzbGEoMCwwJSwzOS4yJSwuOCkpO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YXt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOi44NzVlbTt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzIpO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzIpO21hcmdpbi1ib3R0b206MnB4O2ZvbnQtd2VpZ2h0OjcwMDtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IGhzbGEoMCwwJSwxMDAlLC4yKTtib3JkZXItcmFkaXVzOjNweDtjb2xvcjp2YXIoLS1sb2NhbC1jb2xvci1mb250LCNmZmYpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOm9wYWNpdHkoMjAlKTtiYWNrZHJvcC1maWx0ZXI6b3BhY2l0eSgyMCUpO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpO2JvcmRlcjoycHggc29saWQgdmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuMikpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1vdXRsaW5lZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudDtjb2xvcjp2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtb3V0bGluZWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7b3BhY2l0eTouMzstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDJweCk7YmFja2Ryb3AtZmlsdGVyOmJsdXIoMnB4KTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTFweDt0b3A6LTFweDt3aWR0aDpjYWxjKDEwMCUgKyAycHgpO2hlaWdodDpjYWxjKDEwMCUgKyAycHgpO2Rpc3BsYXk6YmxvY2s7ei1pbmRleDotMX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFye2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMS41cHgpO3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDZweCk7bGluZS1oZWlnaHQ6MDtjb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjFweDttYXJnaW46MCAzcHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhcjpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6M3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItb3V0bGluZWR7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAxLjVweCk7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gNnB4KTtsaW5lLWhlaWdodDowO2NvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MXB4O21hcmdpbjowIDNweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLW91dGxpbmVkOmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDozcHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1vdXRsaW5lZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtvcGFjaXR5Oi4zOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMnB4KTtiYWNrZHJvcC1maWx0ZXI6Ymx1cigycHgpO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMXB4O3RvcDotMXB4O3dpZHRoOmNhbGMoMTAwJSArIDJweCk7aGVpZ2h0OmNhbGMoMTAwJSArIDJweCk7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLWRhc2hlZHtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDEuNXB4KTt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkgLSA2cHgpO2xpbmUtaGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoxcHg7bWFyZ2luOjAgM3B4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItZGFzaGVkOmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDozcHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1kYXNoZWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xcHg7dG9wOi0xcHg7d2lkdGg6Y2FsYygxMDAlICsgMnB4KTtoZWlnaHQ6Y2FsYygxMDAlICsgMnB4KTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1zaXplOjEwcHggMTBweDtiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNDVkZWcsdmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCksdmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCkgM3B4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgNTAlKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93e2Rpc3BsYXk6ZmxleDttYXgtaGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAxcHgpO2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMXB4KTt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkgLSAycHgpO2xpbmUtaGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7bWFyZ2luOjFweDtib3JkZXItY29sb3I6dmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuMikpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3c6Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjNweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93OmVtcHR5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdyAucm93ZG90LS1kb3R7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpLzQgLSAycHgpO2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMnB4KTttYXJnaW4tcmlnaHQ6MXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXI6M3B4IHNvbGlkIHZhcigtLWxvY2FsLWNvbG9yLGhzbGEoMCwwJSwxMDAlLC44KSk7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMzkuMiUsLjgpKTtib3gtc2hhZG93OjAgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjIpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3cgLnJvd2RvdC0tZG90LnNoYXBlLW91dGxpbmVke2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDM5LjIlLC4yKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93IC5yb3dkb3QtLWRvdC5zaGFwZS1yb3VuZGVke2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAuNXB4KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93IC5yb3dkb3QtLWRvdC5zaGFwZS1vdXRsaW5lZC1yb3VuZGVke2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7d2lkdGg6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIC41cHgpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5wbG90LWZsb2F0Ym94LWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzp2aXNpYmxlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5wbG90LWZsb2F0Ym94LWNvbnRhaW5lciAucGxvdC1mbG9hdGJveHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2V9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnBsb3QtZmxvYXRib3gtY29udGFpbmVyIC5wbG90LWZsb2F0Ym94LnN0cmlwZXtiYWNrZ3JvdW5kOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNTNkZWcsdmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpLHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKSA1cHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCAxMnB4KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucGxvdC1mbG9hdGJveC1jb250YWluZXIgLnBsb3QtZmxvYXRib3guc3RyaXBlLWludmVyc2V7YmFja2dyb3VuZDpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDEyN2RlZyx2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSksdmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpIDVweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50IDEycHgpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuaWNvbi1mbG9hdGJveHt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkgLSAxNnB4KTttYXJnaW46NnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtvcGFjaXR5Oi44fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuaWNvbi1mbG9hdGJveCBzdmcgcGF0aHtmaWxsOnZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKTtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsMCwwLC4yKSl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5pY29uLWZsb2F0Ym94OmhvdmVye29wYWNpdHk6MX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHR7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6dmlzaWJsZTtjdXJzb3I6ZGVmYXVsdDt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjJzIGVhc2U7d2lsbC1jaGFuZ2U6ZGlzcGxheTtwb2ludGVyLWV2ZW50czpub25lfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tZGF5LXdpZHRoKTt0b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpzdGFydDthbGlnbi1pdGVtczpzdGFydH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLWNvbnRhaW5lciAubG9uZy1iYXJ7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgsIDApKnZhcigtLWxvbmcsIDApIC0gdmFyKC0tZGF5LXdpZHRoLCAwKSowLjUpO21pbi13aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCwgMCkqdmFyKC0tbG9uZywgMCkgLSB2YXIoLS1kYXktd2lkdGgsIDApKjAuNSk7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAzLjVweCk7bGluZS1oZWlnaHQ6MDtjb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKTtib3JkZXItcmFkaXVzOjAgM3B4IDNweCAwO21hcmdpbi1sZWZ0Oi0zcHg7bWFyZ2luLXRvcDoxcHg7bWFyZ2luLWJvdHRvbToxcHg7b3BhY2l0eTp2YXIoLS1sb2NhbC1vcGFjaXR5LDEpO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwuMik7Ym9yZGVyLWxlZnQtd2lkdGg6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2V9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXIgLmxvbmctYmFyLnNvbGlke29wYWNpdHk6MX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLWNvbnRhaW5lciAubG9uZy1iYXI6Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjRweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3Zlcntib3gtc2hhZG93OjAgMCAycHggN3B4IHJnYmEoMTEzLDE4OSwyNTUsLjQpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94OmhvdmVyKy5mbG9hdC1ib3gtZXh0IC5sb25nLWJhcntib3gtc2hhZG93OjAgMCAycHggNHB4IHJnYmEoMTEzLDE4OSwyNTUsLjQpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Ky5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5yZWQtbGlnaHR7YmFja2dyb3VuZDojZjg0NzQ3fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Ky5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci55ZWxsb3ctbGlnaHR7YmFja2dyb3VuZDojZmRkODM1fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Ky5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5ncmVlbi1saWdodHtiYWNrZ3JvdW5kOiMzODk5M2R9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3Zlcntib3gtc2hhZG93OjAgMCAycHggN3B4IGhzbGEoMCwwJSw0Ny44JSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3ZlcisuZmxvYXQtYm94LWV4dCAubG9uZy1iYXJ7Ym94LXNoYWRvdzowIDAgMnB4IDRweCBoc2xhKDAsMCUsNDcuOCUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3grLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLnJlZC1saWdodHtiYWNrZ3JvdW5kOiNhYTFhMWF9LmNhcGliYXJhLmRhcmstdGhlbWUgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIueWVsbG93LWxpZ2h0e2JhY2tncm91bmQ6I2ZiY2QwMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Ky5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5ncmVlbi1saWdodHtiYWNrZ3JvdW5kOiMzODhlM2N9LmNhcGliYXJhLmRhcmstdGhlbWUgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEuZGFyay10aGVtZSBzcGFuLmRhdGEuc2hhcGUtb3V0bGluZWR7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDg2LjclLC4yKTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO3RyYW5zaXRpb246aGVpZ2h0IDFzIGVhc2V9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXIuaGlkZS1wcm9ncmVzc3toZWlnaHQ6MH0uY2FwaWJhcmEgLnByb2dyZXNzLWJhcjpiZWZvcmV7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QxO2FuaW1hdGlvbi1uYW1lOmxvYWRpbmctZmFzdDE7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3dpZHRoOjYyLjUlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzI5MjkyOTstd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjoyczthbmltYXRpb24tZHVyYXRpb246MnN9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YWZ0ZXJ7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QyO2FuaW1hdGlvbi1uYW1lOmxvYWRpbmctZmFzdDI7LXdlYmtpdC1hbmltYXRpb24tZGVsYXk6MS4zczthbmltYXRpb24tZGVsYXk6MS4zczstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDstd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZX1zcGFuLm1kaXttaW4td2lkdGg6MTRweDttaW4taGVpZ2h0OjE0cHg7ZGlzcGxheTppbmxpbmUtYmxvY2t9c3Bhbi5tZGkubWRpLXN1YmRpcmVjdG9yeS1hcnJvdy1yaWdodHtjb2xvcjpyZ2JhKDAsMCwwLC4yKX0uY2FwaWJhcmEgLmxpZ2h0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MThweDtoZWlnaHQ6MThweDtmbGV4OjAgMCAxOHB4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbjoxMnB4IDhweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpO2JhY2tncm91bmQ6dmFyKC0tbGlnaHQtY29sb3IsdW5zZXQpO2JvcmRlci1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhIC5saWdodC5yZWQtbGlnaHR7YmFja2dyb3VuZDojZjg0NzQ3fS5jYXBpYmFyYSAubGlnaHQueWVsbG93LWxpZ2h0e2JhY2tncm91bmQ6I2ZkZDgzNX0uY2FwaWJhcmEgLmxpZ2h0LmdyZWVuLWxpZ2h0e2JhY2tncm91bmQ6IzM4OTkzZH0uY2FwaWJhcmEgLmxpZ2h0LmRpc2FibGVkLWxpZ2h0e2JhY2tncm91bmQ6IzczNzM3M30uY2FwaWJhcmEgLmxpZ2h0LmJsdWUtbGlnaHR7YmFja2dyb3VuZDojMDI3N2JkfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5saWdodHtib3JkZXItY29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHQucmVkLWxpZ2h0e2JhY2tncm91bmQ6I2FhMWExYX0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHQueWVsbG93LWxpZ2h0e2JhY2tncm91bmQ6I2ZiY2QwMH0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHQuZ3JlZW4tbGlnaHR7YmFja2dyb3VuZDojMzg4ZTNjfS5jYXBpYmFyYSAudGFiLXNlbGVjdC1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNhcGliYXJhIC50YWItc2VsZWN0LWNvbnRhaW5lcjphZnRlcntjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjIwcHg7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo2cHggc29saWQgI2ZmZn0uY2FwaWJhcmEgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQ6Z3JleTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNnB4O291dGxpbmU6bm9uZTt3aWR0aDoxMDBweDtwYWRkaW5nOjNweCAyOHB4IDNweCAxOHB4O2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbjo4cHg7Ym9yZGVyLXJhZGl1czozMHB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmV9LmNhcGliYXJhIHNlbGVjdC50YWJzLXNlbGVjdCBvcHRpb257Y29sb3I6Z3JleTtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxNXB4fS5jYXBpYmFyYSBzZWxlY3QudGFicy1zZWxlY3QuZGlzYWJsZWR7Y29sb3I6Z3JleX0uY2FwaWJhcmEgc2VsZWN0LnRhYnMtc2VsZWN0OmhvdmVye2JvcmRlci1jb2xvcjpncmV5fVwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/src/index.js!./node_modules/sass-loader/dist/cjs.js!./src/scss/style.scss\n");
|
|
107
107
|
|
|
108
108
|
/***/ }),
|
|
109
109
|
|
|
@@ -184,7 +184,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _scs
|
|
|
184
184
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
185
185
|
|
|
186
186
|
"use strict";
|
|
187
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Capibara\", function() { return Capibara; });\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_tableElements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/tableElements */ \"./src/util/tableElements.js\");\n/* harmony import */ var _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/styleUtils */ \"./src/util/styleUtils.js\");\n/* harmony import */ var _util_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/icons */ \"./src/util/icons.js\");\n\n //import dateUtils from '../util/dateUtils';\n\n\n\n\n/**\n * Capibara, planilla para despliegue de datos por fecha como GANTT\n * orientado inicialmente a datos diarios de items\n *\n * @author Patricio. M. Rojas. <patricio@irricrops.com>\n */\n\nclass Capibara {\n /**\n * @constructor\n * Instancia variables de planilla Capibara, con configuracion\n * Crea el elemento contenedor {containerElement} segun selector\n *\n * @param {Object} attributes - atributos que se usaran al iniciar la planilla\n * @param {Object} attributes.config - Configuracion de planilla\n */\n constructor({\n config\n }) {\n if (config == null) console.error(\"config no econtrado\");\n this.containerElement = document.querySelector(config.selector);\n if (this.containerElement == null) console.error(\"Elemento dom segun config.selector, no encontrado\");\n this.initialized = false;\n this.$capibara = null;\n this.$elements = {};\n this.tabSelected = null;\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.config = config;\n this.lastDataDay = null;\n this.isShowNavExtended = false;\n this.isShowNavInitial = true;\n this.isShowNavButtons = true;\n this.isMobile = false;\n this.lastMousePosition = null;\n this.isVisibleContextMenu = false;\n this.isDisabledInputsNavRight = false;\n this.mobileSelectable = config.timeline.mobileSelectable === true;\n }\n /**\n * Inicializa Planilla:\n * - vacia variables necesarias\n * - crea planilla llamando a drawTable\n * - Agrega eventos a planilla\n * - mueve scroll al medio de la tabla\n */\n\n\n init() {\n this.tabSelected = null;\n this.$capibara = null;\n this.$elements = {};\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.lastDataDay = null;\n this.isMobile = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile(this.config);\n this.isVisibleContextMenu = false;\n this.mobileSelectable = this.config.timeline.mobileSelectable === true;\n this.setAllCSSVariables();\n this.config.timeline.selectableDesktop = this.config.timeline.selectableDesktop != null ? this.config.timeline.selectableDesktop : this.config.timeline.selectable;\n this.drawTable();\n this.addEvents();\n this.scrollToMiddle();\n this.toggleSidebarMobile();\n this.updateMobileFooterVisibility();\n this.updateMobileFooterButtonsVisibility();\n this.initialized = true;\n }\n /**\n * Cambia configuracion de planilla\n *\n * @param {Object} config - Configuracion nueva para planilla\n */\n\n\n setConfig(config) {\n this.config = config;\n }\n /**\n * Crea la planilla\n * agregando todos los elementos en orden dentro\n *\n * @return { DomElement } $capibara - elemento del Dom que contiene toda la planilla\n */\n\n\n drawTable() {\n let config = this.config;\n let initialTab = config.timeline.tabs[0];\n let firstChildren = {};\n\n if (config.data && config.data.length > 0 && config.data[0].children.length > 0) {\n firstChildren = config.data[0].children[0];\n }\n\n let $capibara = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createAgTable(config);\n let $corner = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCorner(config, initialTab);\n let $cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerRight(config);\n let $headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderTop(config);\n let $header = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeader(config);\n let $todayLine = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createTodayLine(config);\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(config);\n let $navLeft = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavLeft(config);\n let $cornerFooter = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerFooter(config);\n let $footer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFooter(config);\n let $floatBoxContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFloatBox(config, initialTab);\n let $selectContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createSelectBoard(config);\n let $plotVerticalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotVerticalContainer(config);\n let $plotHorizontalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotHorizontalContainer(config);\n let $detailDay = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createDetailDay(config, firstChildren);\n let {\n elem: $contextMenu,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n config\n });\n this.isVisibleContextMenu = isVisible;\n let $navRight, inputs, inputsWithReload, saveCancelBtns;\n ({\n element: $navRight,\n inputs,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavRight(config));\n let $mobileFooter = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createMobileFooter(config);\n let $background = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createBackground(config);\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"container-tl\"\n });\n let $dayMouseOver = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"day-mouse-over\"\n });\n let {\n height,\n width\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let $table = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"table\",\n style: {\n 'width': width + \"px\",\n 'height': height + \"px\"\n }\n });\n $table.appendChild($background);\n $table.appendChild($dayMouseOver);\n $table.appendChild($detailDay);\n $table.appendChild($selectContainer);\n $table.appendChild($floatBoxContainer);\n\n if ($headerExtended) {\n $header.appendChild($headerExtended);\n }\n\n $container.appendChild($header);\n $container.appendChild($plotVerticalContainer);\n $container.appendChild($plotHorizontalContainer);\n $container.appendChild($todayLine);\n $container.appendChild($navLeft);\n $container.appendChild($table);\n if ($cornerFooter) $container.appendChild($cornerFooter);\n if ($footer) $container.appendChild($footer);\n $capibara.appendChild($headerTop);\n $capibara.appendChild($corner);\n $capibara.appendChild($cornerRight);\n $capibara.appendChild($container);\n $capibara.appendChild($mobileFooter);\n $capibara.appendChild($navRight);\n if ($contextMenu) $capibara.appendChild($contextMenu);\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n this.$capibara = $capibara;\n this.$elements = {\n $headerTop,\n $detailDay,\n $contextMenu,\n $floatBoxContainer,\n $selectContainer,\n $table,\n $background,\n $plotVerticalContainer,\n $plotHorizontalContainer,\n $dayMouseOver,\n $container,\n $navRight,\n $navLeft,\n $header,\n $todayLine,\n $corner,\n $cornerRight,\n $mobileFooter\n };\n this.containerElement.innerHTML = \"\";\n this.containerElement.appendChild($capibara);\n this.selectTab(initialTab);\n return $capibara;\n }\n /**\n * Cambia el modo oscuro, segun el estado actual\n */\n\n\n toggleDark() {\n this.setDark(!Boolean(this.config.timeline.dark));\n }\n /**\n * Cambia el modo oscuro, segun parametro\n *\n * @param {Boolean} [isDark = false] - indica si se activa el modo oscuro o no\n */\n\n\n setDark(isDark = false) {\n let darkClassName = \"dark-theme\";\n this.config.timeline.dark = isDark;\n\n if (isDark) {\n this.$capibara.classList.add(darkClassName);\n } else {\n this.$capibara.classList.remove(darkClassName);\n }\n }\n /**\n * Cambia el tema de color secundario, segun parametro\n * -Quita todos los posibles colores de la planilla, obteniendolos de Tabs\n * -Agrega el color enviado por parametro como clase del domElement $capibara\n *\n * @param {String} color - color, como nombre de clase, para agregar \n */\n\n\n changeColorTheme(color) {\n this.config.timeline.tabs.forEach(tab => {\n this.$capibara.classList.remove(tab.color);\n });\n this.$capibara.classList.add(color);\n }\n /**\n * Selecciona tab en planilla\n * si redraw == true , redibuja navRight y floatBox\n * ya que son inputs y esteticas personalizadas por Tab\n *\n * @param {Object} tab - tab, obtenida desde configuracion\n * @param {Boolean} [redraw=true] - opcion de redibujado\n */\n\n\n selectTab(tab, redraw = true) {\n if (tab) {\n this.tabSelected = tab;\n this.cleanMultiInput();\n\n if (redraw) {\n this.redraw({\n headerTop: true,\n cornerLeft: true,\n navLeft: true,\n navRight: true,\n floatBox: true\n });\n }\n\n this.changeColorTheme(tab.color);\n this.$capibara.dispatchEvent(new CustomEvent(\"selectTab\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tabSelected: this.tabSelected\n }\n }));\n } else {\n console.error(\"tab no encontrada\");\n }\n }\n\n selectLegend(evt) {\n let legend = evt.detail.legend;\n evt.detail.$legend.classList.toggle(\"active\");\n\n if (legend) {\n legend.active = !legend.active;\n }\n\n this.redraw({\n floatBox: true,\n detailDay: true\n });\n }\n /**\n * muestra alternadamente los sidebar initial y extended\n */\n\n\n toggleSidebar() {\n this.setShowNavInitial(!this.isShowNavInitial);\n\n if (!this.isMobile) {\n this.setShowNavExtended(!this.isShowNavExtended);\n } else {\n let cornerInputTitles = this.$elements.$corner.querySelector(\".input-titles\");\n\n if (cornerInputTitles) {\n cornerInputTitles.style.display = this.isShowNavInitial ? \"none\" : \"flex\";\n }\n }\n\n this.refreshScrollUtilsVars();\n }\n /**\n * Oculta nav initial , extended y buttons\n */\n\n\n hideSidebars() {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n }\n /**\n * Muestra/Oculta Sidebar inicial\n */\n\n\n setShowNavInitial(isShowNavInitial) {\n this.isShowNavInitial = isShowNavInitial;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar extendido\n */\n\n\n setShowNavExtended(isShowNavExtended) {\n this.isShowNavExtended = isShowNavExtended;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar buttons\n */\n\n\n setShowNavButtons(isShowNavButtons) {\n this.isShowNavButtons = isShowNavButtons;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(this.config, this.isShowNavButtons, this.tabSelected);\n }\n /**\n * Muestra/oculta Sidebar Derecho\n */\n\n\n toggleSidebarRight() {\n let isHidden = !this.$capibara.classList.contains(\"extended-right\");\n this.setVisibleSidebarRight(!isHidden);\n this.refreshScrollUtilsVars();\n }\n /**\n * Modifica la opcion de mostrar y ocultar sidebar derecho\n *\n * @param {Boolean} [show = true] - indica si debe mostrarse u ocultarse\n */\n\n\n setVisibleSidebarRight(show = true) {\n let fn = show ? \"add\" : \"remove\";\n this.$capibara.classList[fn](\"extended-right\");\n }\n /**\n * Muestra/oculta Header extendido (inputs)\n */\n\n\n toggleHeader() {\n this.$capibara.classList.toggle(\"header-extended\");\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Muestra/oculta barra de carga de planilla \n * Si se llama sin parametros, por defecto muestra el loading derecho\n * que corresponde al sidebar-right\n *\n * @param {String} [position = \"right\"] - escoge loading, puede ser \"left\" | \"right\"\n * @param {Boolean} [show = true] - indica si mostrar u ocultar loading\n */\n\n\n loading(position = \"right\", show = true) {\n let fn = show ? \"remove\" : \"add\";\n let element = this.$capibara.querySelector(\".progress-bar-\" + position);\n element.classList[fn](\"hide-progress\");\n }\n\n setDisableInputsNavRight(isDisabled = true) {\n this.isDisabledInputsNavRight = isDisabled;\n this.$inputsNavRight.forEach($inputContainer => {\n let $inputs = $inputContainer.querySelectorAll(\"input\");\n $inputs.forEach($i => {\n $i.setAttribute(\"disabled\", isDisabled);\n });\n });\n let btns = this.$saveCancelBtns.querySelectorAll(\"button\");\n btns.forEach(btn => {\n btn.setAttribute(\"disabled\", isDisabled);\n });\n }\n /**\n * Busca un boton segun selector, y le agrega la clase \"loading\"\n * y deshabilita el boton\n *\n * @param { String } [ selector = '[cap-btn-calendar]' ] - selector de boton\n * @param { Boolean } [isLoading = true] - define si esta cargando o no\n */\n\n\n loadingBtn(selector = \"[cap-btn-calendar]\", isLoading = true) {\n let element = this.$capibara.querySelector(selector);\n\n if (element) {\n let fn = isLoading ? \"add\" : \"remove\";\n element.classList[fn](\"loading\");\n\n if (isLoading) {\n element.setAttribute(\"disabled\", \"\");\n } else {\n element.removeAttribute(\"disabled\");\n }\n }\n }\n /**\n * Crea Evento de guardado de los inputs del Sidebar Right\n * obtiene todos los valores de los inputs registrados en this.$inputs y \n * los retorna creando el evento \"save\"\n *\n */\n\n\n saveInputsNavRight() {\n let inputValues = [];\n let isValid = this.validateInputsNavRight();\n\n if (!isValid) {\n return;\n }\n\n this.setDisableInputsNavRight(true);\n this.$inputsNavRight.forEach($input => {\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n inputValues.push({\n key: key,\n inputConfig: inputConfig,\n el: $input,\n value: this.getInputValue($input, inputConfig)\n });\n }\n });\n this.$capibara.dispatchEvent(new CustomEvent(\"save\", {\n bubbles: true,\n cancelable: false,\n detail: {\n inputValues: inputValues,\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n validateInputsNavRight() {\n let isFormValid = true;\n this.$inputsNavRight.forEach($input => {\n let isInputValid = true;\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n let value = this.getInputValue($input, inputConfig);\n\n if (inputConfig.required) {\n if (value === \"\" || value === null || value.length == 0) {\n isFormValid = false;\n isInputValid = false;\n }\n }\n\n if (inputConfig.validation && !inputConfig.validation({\n value,\n inputConfig,\n $input\n })) {\n isFormValid = false;\n isInputValid = false;\n }\n\n if (!isInputValid) {\n $input.classList.add(\"is-invalid\");\n } else {\n $input.classList.remove(\"is-invalid\");\n }\n }\n });\n return isFormValid;\n }\n /**\n * Cancela formulario de sidebar right\n * En mobile, también desactiva el modo selección\n */\n\n\n cancelMultiInput() {\n this.$capibara.dispatchEvent(new CustomEvent(\"cancel\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n this.cleanMultiInput();\n\n if (this.isMobile && this.mobileSelectable) {\n this.mobileSelectable = false;\n this.config.timeline.mobileSelectable = false;\n this.setSelectable(false);\n this.updateMobileSelectButton();\n this.updateMobileFooterButtonsVisibility();\n }\n }\n /**\n * Limpia el formulario en el sidebar right\n * oculta el sidebar right\n */\n\n\n cleanMultiInput() {\n this.$capibara.classList.remove(\"extended-right\");\n this.selected = [];\n this.redrawSelection();\n }\n /**\n * Obtiene el valor de un input\n *\n * @param {Object} elem - elemento del dom que representa al input, no necesariamente input\n * @param {Object} config - configuracion de input\n * @return {*} valor del Input\n */\n\n\n getInputValue(elem, inputConfig) {\n let value = null;\n let inputElement = null;\n let inputsElement = null;\n\n switch (inputConfig.type) {\n case 'custom':\n value = inputConfig.getValue ? inputConfig.getValue({\n elem,\n props: inputConfig\n }) : null;\n break;\n\n case 'time':\n let hhElement = elem.querySelector(\".hour\");\n let mmElement = elem.querySelector(\".minutes\");\n let hhValue = hhElement.value;\n let mmValue = mmElement.value;\n\n if (hhValue) {\n hhValue = parseFloat(hhValue);\n }\n\n if (mmValue) {\n mmValue = parseFloat(mmValue);\n }\n\n value = {\n hh: hhValue,\n mm: mmValue\n };\n break;\n\n case 'message':\n case 'textarea':\n inputElement = elem.querySelector(\"textarea\");\n value = inputElement.value || '';\n break;\n\n case \"inputList\":\n let valuesInputs = [];\n inputsElement = elem.querySelectorAll(\"input[type='number']\");\n inputsElement.forEach(inputElement => {\n let valueInput = inputElement.value;\n\n if (valueInput) {\n valueInput = parseFloat(valueInput);\n }\n\n let label = inputElement.getAttribute(\"input-label\");\n let id = inputElement.getAttribute(\"input-id\");\n valuesInputs.push({\n label: label,\n value: valueInput,\n id: id\n });\n });\n value = valuesInputs;\n break;\n\n case 'number':\n case 'float':\n inputElement = elem.querySelector(\"input[type='number']\");\n value = inputElement.value;\n\n if (value) {\n value = parseFloat(value);\n }\n\n break;\n\n case 'checkbox':\n inputElement = elem.querySelector(\"input[type='checkbox']\");\n value = inputElement.checked;\n break;\n\n case 'select':\n inputElement = elem.querySelector(\"select.input-select\");\n let inputValue = inputElement.value;\n value = inputConfig.options.find(o => o.id == inputValue);\n break;\n\n case 'file':\n inputElement = elem.querySelector(\"input[type='file']\");\n value = inputElement.files;\n break;\n\n case 'input-box':\n inputsElement = elem.querySelectorAll(\".mini-input-section input\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.value;\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"input-id\"),\n key: i.getAttribute(\"input-key\"),\n value: v\n });\n });\n break;\n\n case 'data-list':\n inputsElement = elem.querySelectorAll(\".mini-input-section\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.getAttribute(\"data-value\");\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"data-id\"),\n key: i.getAttribute(\"data-key\"),\n value: v || null\n });\n });\n break;\n\n case 'title':\n //no es realmente un input, es solo un texto\n //no es necesario obtener valores de aqui\n break;\n\n case 'text':\n default:\n inputElement = elem.querySelector(\"input\");\n\n if (inputElement) {\n value = inputElement.value;\n }\n\n }\n\n return value;\n }\n /**\n * Funcion llamada al pasar sobre un item del sidebar izquierdo, \n * para mostrar un detalle del item\n * \n * El detalle del item se ancla de manera superior o inferior dependiendo de \n * la posicion el mouse en pantalla, para no salir del campo visual \n *\n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n overNavItem(evt) {\n let pos = evt.detail.pos;\n let item = evt.detail.item; //let dataDay = evt.detail.data;\n\n let $detail = this.$elements.$navLeft.querySelector(\".detail-nav-item\");\n\n if ($detail.classList.contains(\"hide\")) {\n $detail.classList.remove(\"hide\");\n }\n\n ;\n $detail.innerHTML = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDetailNavItemContent(item);\n\n if (pos.yPercent > 50) {\n //mayor a 50%\n if (!$detail.classList.contains(\"to-bottom\")) {\n $detail.classList.add(\"to-bottom\");\n }\n } else {\n if ($detail.classList.contains(\"to-bottom\")) {\n $detail.classList.remove(\"to-bottom\");\n }\n }\n\n $detail.style.top = pos.top + \"px\";\n }\n /**\n * Oculta detalle de item en sidebar izquierdo \n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n leaveNavItem() {\n this.$elements.$navLeft.querySelector(\".detail-nav-item\").classList.add(\"hide\");\n }\n /**\n * Captura evento mousemove de floatBoxContainer\n * para refrescar la posicion y detener posteriores eventos\n *\n * @param {Object} evt - Evento de mousemove\n */\n\n\n mouseMoveOnFlexBoxContainer(evt) {\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition(position);\n evt.preventDefault();\n }\n /**\n * Captura evento mouseleave de floatBoxContainer\n * para ocultar detailDay\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseLeaveOnFloatBoxContainer(evt) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n /**\n * Maneja el clic fuera del div específico\n * @param {Event} event - El evento de clic\n */\n\n\n handleClickOutside(event) {\n if (!this.isMobile && this.$elements && this.$elements.$detailDay && !this.$elements.$detailDay.contains(event.target)) {\n this.hideDetailDay();\n }\n }\n /**\n * Captura el evento mousemove en $table, para indicar la posicion de $dayMouseOver\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseMoveOnTable(evt) {\n if (this.isVisibleContextMenu) return;\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n\n if (this.lastMousePosition == null || this.lastMousePosition.left != pos.left || this.lastMousePosition.top != pos.top) {\n this.$elements.$dayMouseOver.style.transform = \"translate(\" + pos.left + \"px ,\" + pos.top + \"px)\";\n evt.preventDefault();\n this.lastMousePosition = pos;\n }\n }\n\n rightClickOnCapibara(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n }\n\n rightClickOnTable(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n this.showContextMenuOnTable(evt);\n evt.preventDefault();\n }\n }\n\n showContextMenuOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table);\n\n if (this.isVisibleContextMenu) {\n this.hideContextMenu();\n return;\n } //let position = utils.eventToPosition(this.config, evt, this.$elements.$table);\n\n\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n $capibaraElem: this.$capibara,\n config: this.config,\n evt,\n //position,\n date,\n item,\n selected: this.selected,\n name: \"onTable\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n\n if (isVisible) {\n evt.preventDefault();\n }\n }\n /**\n * Captura el evento click en $table, para seleccionar dias\n * los dias seleccionados se registran en this.selected[]\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n clickOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table); //if(item == null) return; // cuano se selecciona un espacio no seleccionable\n //si es mobile y selección deshabilitada, solo muestra detalles (no selecciona)\n\n let dataByDate = _.find(item.data, {\n date\n });\n\n if (this.isMobile && !this.mobileSelectable && dataByDate) {\n // siempre actualizar detail-day (con o sin datos) para que muestre el día seleccionado\n let newDDContentString = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawDetailDay(this.config, item, dataByDate, this.tabSelected);\n\n if (newDDContentString) {\n this.$elements.$detailDay.innerHTML = newDDContentString;\n }\n\n this.lastDataDay = dataByDate;\n this.focusOnFloatBox({\n pos,\n evt\n });\n return;\n }\n\n if (!this.isSelectable({\n item,\n date,\n dataByDate\n })) {\n this.$capibara.dispatchEvent(new CustomEvent(\"selectNoSelectable\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected,\n lastSelection: {\n date,\n item,\n pos\n }\n }\n }));\n return; // cuando se selecciona un espacio no seleccionable\n }\n\n let eventName = \"deselectDay\";\n\n if (this.toggleSelect(date, item, pos)) {\n eventName = \"selectDay\";\n }\n\n this.$capibara.dispatchEvent(new CustomEvent(eventName, {\n bubbles: true,\n cancelable: false,\n detail: {\n config: this.config,\n lastSelection: {\n date,\n item,\n pos\n },\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n toggleSelect(date, item, pos) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item);\n return false;\n } else {\n this.select(date, item, pos);\n return true;\n }\n }\n\n isSelected(date, item) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n return index > -1;\n }\n\n isSelectable({\n item,\n date,\n dataByDate\n }) {\n if (!this.config.timeline.selectable) {\n return false;\n }\n\n if (item.selectable === false) {\n return false;\n }\n\n if (this.config.timeline.noFutureSelectable) {\n let d = new Date(date);\n let today = new Date();\n\n if (d > today) {\n return false;\n }\n }\n\n let itemIsSelectable = true;\n\n if (this.tabSelected && this.tabSelected.selectableIfHas) {\n if (!item.values[this.tabSelected.selectableIfHas]) {\n itemIsSelectable = false;\n }\n }\n\n return itemIsSelectable;\n }\n\n redrawSelection() {\n this.checkClassSidebarExtendedRight();\n this.updateMobileFooterVisibility();\n this.updateMobileFooterButtonsVisibility();\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawSelectBoard(this.$elements.$selectContainer, this.selected);\n }\n\n deselect(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n this.selected.splice(index, 1);\n }\n\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n select(date, item, pos, redraw = true, refreshForm = true) {\n if (!this.isSelected(date, item)) {\n this.selected.push({\n index: 0,\n date,\n item,\n pos\n });\n let dataDay = null;\n\n if (item.data) {\n dataDay = item.data.find(d => {\n return d.date == date;\n });\n } // si es el primer item seleccionado, se autorrellena el formulario de navRight (no en mobile con selección)\n\n\n if (this.selected.length == 1 && refreshForm && !(this.isMobile && this.mobileSelectable)) {\n this.redraw({\n cornerRight: true\n });\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected, dataDay, this.selected[0]);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n }\n\n let focused = false;\n\n if (!(this.isMobile && this.mobileSelectable)) {\n this.$inputsNavRight.forEach(inputNavRight => {\n if (!focused) {\n let validInputs = inputNavRight.querySelectorAll(\"input\");\n\n if (validInputs && validInputs.length > 0) {\n let firstValidInput = _.first(validInputs);\n\n window.setTimeout(function () {\n firstValidInput.focus();\n }, 0);\n focused = true;\n }\n }\n });\n }\n\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n setIndexToSelected() {\n this.selected.forEach((s, index) => {\n s.index = index + 1;\n });\n }\n\n isSelectedAllDate(date) {\n let isAllSelected = true;\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n if (!this.isSelected(date, item)) {\n isAllSelected = false;\n }\n });\n });\n return isAllSelected;\n }\n\n selectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.selectByItemDate(date, item, false);\n });\n });\n }\n\n deselectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.deselectByItemDate(date, item, false);\n });\n });\n }\n\n selectByItemDate(date, item, redraw = true, refreshForm = true) {\n if (!this.isSelected(date, item)) {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItemDate(this.config, item, date);\n this.select(date, item, pos, redraw, refreshForm);\n }\n }\n\n deselectByItemDate(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item, redraw);\n }\n }\n\n deselectAll(redraw = false) {\n this.selected = [];\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n checkClassSidebarExtendedRight() {\n const showSidebar = this.selected.length > 0 && !(this.isMobile && this.mobileSelectable);\n\n if (showSidebar) {\n this.$capibara.classList.add(\"extended-right\");\n } else {\n this.$capibara.classList.remove(\"extended-right\");\n }\n }\n\n updateMobileFooterVisibility() {\n const $footer = this.$elements.$mobileFooter;\n if (!$footer) return;\n const showFooter = this.isMobile && this.config.timeline.selectableDesktop !== false;\n if (showFooter) this.$capibara.classList.add(\"has-mobile-footer\");else this.$capibara.classList.remove(\"has-mobile-footer\");\n }\n\n handleMobileFooterClick(evt) {\n if (evt.target.closest(\".mobile-footer-cancel\")) {\n this.cancelMultiInput();\n return;\n }\n\n const $btn = evt.target.closest(\".mobile-footer-btn[data-mobile-btn-idx]\");\n\n if ($btn && !$btn.disabled) {\n const index = parseInt($btn.getAttribute(\"data-mobile-btn-idx\"), 10);\n const buttons = this.config.timeline.mobileFooter && this.config.timeline.mobileFooter.buttons || [];\n const btnConfig = buttons[index];\n\n if (btnConfig && typeof btnConfig.onClick === \"function\") {\n btnConfig.onClick({\n evt,\n selected: this.selected\n });\n }\n }\n }\n /**\n * oculta detailDay en el dom, usando la clase dd-hide\n */\n\n\n hideDetailDay() {\n this.$elements.$detailDay.classList.add(\"dd-hide\");\n }\n\n hideContextMenu() {\n if (this.$elements.$contextMenu) {\n this.$elements.$contextMenu.classList.add(\"cm-hide\");\n }\n\n this.isVisibleContextMenu = false;\n }\n\n refreshScrollUtilsVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft = this.$elements.$container.scrollLeft;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop = this.$elements.$container.scrollTop;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollWidth = this.$elements.$container.scrollWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollHeight = this.$elements.$container.scrollHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientTable = this.$elements.$table.getBoundingClientRect();\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientContainer = this.$elements.$container.getBoundingClientRect();\n }\n\n refreshVirtualScrollVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth = this.$elements.$container.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight = this.$elements.$container.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth = this.$elements.$navLeft.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight = this.$elements.$header.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n }\n\n refreshVirtualScroll() {\n let $floatBoxList = this.$elements.$floatBoxContainer.querySelectorAll(\".float-box\");\n $floatBoxList.forEach(f => {\n if (this.isVisibleFloatBoxElement(f)) {\n f.setAttribute(\"data-is-visible\", true);\n } else {\n f.setAttribute(\"data-is-visible\", false);\n }\n });\n }\n\n isVisibleFloatBoxElement(f) {\n let containerWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth;\n let containerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight;\n let navWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth;\n let headerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight;\n let dayWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth;\n let itemHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight;\n let scrollLeft = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft;\n let scrollTop = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop;\n let margin = dayWidth;\n let left = parseFloat(f.style.left);\n let top = parseFloat(f.style.top);\n let visibleWidth = containerWidth - navWidth;\n let visibleHeight = containerHeight - headerHeight;\n let isVisibleLeft = left > scrollLeft - dayWidth - margin;\n let isVisibleRight = left < scrollLeft + visibleWidth + dayWidth + margin;\n let isVisibleTop = top > scrollTop - itemHeight - margin;\n let isVisibleBottom = top < scrollTop + visibleHeight + itemHeight + margin;\n return isVisibleLeft && isVisibleRight && isVisibleTop && isVisibleBottom;\n }\n\n onScrollContainer() {\n if (!this.refreshVirtualScrollDebounced) {\n this.refreshVirtualScrollDebounced = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].throttle(this.refreshVirtualScroll.bind(this), 100, {\n leading: true,\n trailing: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollDebounced();\n this.hideContextMenu();\n }\n /**\n * Muestra Detail dialog y Refresca su posicion \n * usando el evento del mouse\n *\n * @param {Object} evt - evento de mousemove, para posiciones en pantalla\n */\n\n\n refreshDetailDayPosition(position) {\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n this.$elements.$detailDay.style.top = position.top + \"px\";\n this.$elements.$detailDay.style.left = position.left + dayWidth + \"px\";\n let yPositionClass = \"has-top-arrow\";\n let xPositionClass = \"\"; //condicion para primeras 3 filas\n\n if (position.topClient <= itemHeight * 3) {\n yPositionClass = \"has-ceil-arrow\";\n } else if (position.yPercent > 20 && position.yPercent <= 70) {\n //entre 20 y 50 %\n yPositionClass = \"has-middle-arrow\";\n } else if (position.yPercent > 70) {\n yPositionClass = \"has-bottom-arrow\";\n }\n\n if (position.xPercent > 30) {\n xPositionClass = \"has-right-arrow\";\n } //quita dd-hide, sobreescribiendo todas las clases\n\n\n this.$elements.$detailDay.className = \"detail-day \" + yPositionClass + \" \" + xPositionClass;\n }\n /**\n * Captura evento click en boton para abrir arbol, en sidebar izquierdo\n *\n * @param {Object} evt - objeto evento click\n */\n\n\n clickNavLeftTreeIcon() {\n this.redraw({\n floatBox: true\n });\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n\n clickFloatBox(evt) {\n if (this.isMobile) {\n this.mouseOverFloatBox(evt, false);\n }\n }\n /**\n * Captura evento mouseover sobre elemento floatBox\n * usada para mostrar detalle de dia/item del floatbox\n */\n\n\n mouseOverFloatBox(evt, force) {\n let item = evt.detail.item;\n let dataDay = evt.detail.data; //verifica que sean dias distintos, comparandolo con el anterior,\n // para no crear nuevamente el mismo detail-day, con los mismos datos\n\n if (dataDay !== this.lastDataDay || force) {\n let newDDContentString = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawDetailDay(this.config, item, dataDay, this.tabSelected);\n\n if (newDDContentString) {\n this.$elements.$detailDay.innerHTML = newDDContentString;\n }\n\n this.lastDataDay = dataDay;\n }\n }\n\n clickDateHeader(evt) {\n let date = evt.detail.date;\n this.toggleSelectByDate(date);\n this.redrawSelection();\n }\n\n toggleSelectByDate(date) {\n if (this.isSelectedAllDate(date)) {\n this.deselectByDate(date);\n } else {\n this.selectByDate(date);\n }\n\n this.selected = this.selected.sort((s, n) => {\n return new Date(s.date) - new Date(n.date);\n });\n this.setIndexToSelected();\n }\n\n contextMenuDateHeader(evt) {\n let left = evt.detail.clientX;\n let top = evt.detail.clientY - this.$capibara.getBoundingClientRect().top;\n let date = evt.detail.date;\n const target = evt.detail.$elem;\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n target,\n $capibaraElem: this.$capibara,\n config: this.config,\n selected: this.selected,\n date,\n left,\n top,\n name: \"onDateHeader\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n }\n /**\n * Captura evento window resize\n * para verificar si es mobile o no\n */\n\n\n onWindowResize() {\n if (this.initialized) {\n let oldValue = this.isMobile;\n let newValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile(this.config);\n\n if (oldValue != newValue) {\n this.isMobile = newValue;\n this.toggleSidebarMobile();\n this.updateMobileFooterVisibility();\n this.setAllCSSVariables();\n this.redraw({\n floatBox: true,\n navLeft: true,\n header: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n }\n /**\n * Cambia sidebar para mobile, segun variable this.isMobile\n */\n\n\n toggleSidebarMobile() {\n if (this.isMobile) {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n this.setEditable(false);\n this.setSelectable(this.mobileSelectable);\n } else {\n this.setShowNavInitial(true);\n this.setShowNavExtended(false);\n this.setShowNavButtons(true);\n this.setEditable(true);\n this.setSelectable(this.config.timeline.selectableDesktop !== false);\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n\n setEditable(newEditable) {\n if (this.config.timeline.editable != newEditable) {\n this.config.timeline.editable = newEditable;\n this.redraw({\n navLeft: true,\n header: true\n });\n }\n }\n\n setSelectable(newSelectable) {\n if (this.config.timeline.selectable != newSelectable) {\n this.config.timeline.selectable = newSelectable;\n this.cleanMultiInput();\n }\n }\n\n toggleMobileSelect() {\n this.mobileSelectable = !this.mobileSelectable;\n this.config.timeline.mobileSelectable = this.mobileSelectable;\n\n if (this.isMobile) {\n this.setSelectable(this.mobileSelectable);\n }\n\n this.updateMobileSelectButton();\n this.checkClassSidebarExtendedRight();\n this.updateMobileFooterVisibility();\n this.$capibara.dispatchEvent(new CustomEvent(\"mobileSelectToggled\", {\n bubbles: true,\n cancelable: false,\n detail: {\n mobileSelectable: this.mobileSelectable\n }\n }));\n }\n\n updateMobileSelectButton() {\n let $btn = this.$capibara && this.$capibara.querySelector(\"[toggle-mobile-select]\");\n if (!$btn) return;\n const active = this.mobileSelectable;\n const label = active ? \"Desactivar selección\" : \"Activar selección de días\";\n const labelStyle = active ? \"display:none\" : \"\";\n const countStyle = active ? \"\" : \"display:none\";\n const countText = this.selected.length + \" d\";\n $btn.innerHTML = this.getCheckboxIconHtml(active) + '<span class=\"mobile-footer-select-label\" style=\"' + labelStyle + '\">Seleccionar días</span>' + '<span class=\"mobile-footer-select-count\" style=\"' + countStyle + '\">' + countText + \"</span>\";\n $btn.classList.toggle(\"active\", active);\n $btn.setAttribute(\"aria-checked\", active);\n $btn.setAttribute(\"aria-label\", label);\n $btn.setAttribute(\"cap-tooltip\", label);\n this.updateMobileFooterButtonsVisibility();\n }\n\n updateMobileFooterButtonsVisibility() {\n const $footer = this.$elements.$mobileFooter;\n if (!$footer) return;\n const selectMode = this.mobileSelectable;\n const hasSelected = this.selected.length > 0;\n const $count = $footer.querySelector(\".mobile-footer-select-count\");\n if ($count) $count.textContent = this.selected.length + \" d\";\n $footer.querySelectorAll(\"[data-show-when]\").forEach($el => {\n const showWhen = $el.getAttribute(\"data-show-when\");\n let visible = showWhen === \"always\" || showWhen === \"select\" && selectMode || showWhen === \"detail\" && !selectMode;\n\n if ($el.classList.contains(\"mobile-footer-cancel\")) {\n visible = visible && hasSelected;\n }\n\n $el.classList.toggle(\"mobile-footer-btn-hidden\", !visible);\n const disabledWhenNoSelection = $el.getAttribute(\"data-disabled-when-no-selection\") === \"true\";\n const disabled = disabledWhenNoSelection && selectMode && !hasSelected;\n $el.disabled = disabled;\n });\n }\n\n getCheckboxIconHtml(checked) {\n if (_util_icons__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getCheckboxIcon) return _util_icons__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getCheckboxIcon(checked);\n const path = checked ? \"M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" : \"M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,5V19H5V5H19Z\";\n return '<span class=\"checkbox-icon\"><svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"' + path + '\"/></svg></span>';\n }\n\n focusOnFloatBox({\n pos,\n evt\n }) {\n if (this.isMobile) {\n let containerWidth = this.$elements.$container.clientWidth;\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let navWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--nav-width\"));\n let left = pos.left - containerWidth + 1.5 * dayWidth + navWidth; //let containerHeight = this.$elements.$container.clientHeight;\n\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\")); //let headerHeight = parseFloat(utils.getCSSVariable(this.config, \"--header-height\"));\n\n let top = pos.top - 0.5 * itemHeight;\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition({ ...position,\n topClient: position.yInnerPercent >= 70 ? position.topClient : 0,\n // fuerza posicion de arrow en detailday\n xPercent: position.x < 4 ? 0 : 100 // fuerza arrow right\n\n });\n this.$elements.$container.scroll({\n top,\n left,\n behavior: 'smooth'\n });\n }\n }\n\n refreshInputsWithReload({\n detail\n }) {\n if (this.isMobile && this.mobileSelectable) return;\n this.$inputsWithReload = this.$inputsWithReload.map(({\n $input,\n config\n }) => {\n let lastSelection = detail && detail.lastSelection ? detail.lastSelection : null;\n let newInput = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createInput(config, null, lastSelection, detail.selected);\n $input.parentElement.replaceChild(newInput, $input);\n let index = this.$inputsNavRight.indexOf($input);\n\n if (index >= 0) {\n this.$inputsNavRight[index] = newInput;\n }\n\n return {\n $input: newInput,\n config\n };\n });\n }\n /**\n * Agrega eventos a los elementos del dom de la planilla\n * usando el objecto $capibara\n */\n\n\n addEvents() {\n this.$capibara.addEventListener(\"click\", this.hideContextMenu.bind(this));\n this.$capibara.addEventListener(\"contextmenu\", this.rightClickOnCapibara.bind(this));\n this.$capibara.addEventListener(\"toggleDark\", this.toggleDark.bind(this));\n this.$capibara.addEventListener(\"toggleHeader\", this.toggleHeader.bind(this));\n this.$capibara.addEventListener(\"toggleMobileSelect\", this.toggleMobileSelect.bind(this));\n this.$capibara.addEventListener(\"toggleSidebar\", this.toggleSidebar.bind(this));\n this.$capibara.addEventListener(\"toggleSidebarRight\", this.toggleSidebarRight.bind(this));\n this.$capibara.addEventListener(\"saveMultiInput\", this.saveInputsNavRight.bind(this));\n this.$capibara.addEventListener(\"cancelMultiInput\", this.cancelMultiInput.bind(this));\n this.$capibara.addEventListener(\"overNavItem\", this.overNavItem.bind(this));\n this.$capibara.addEventListener(\"leaveNavItem\", this.leaveNavItem.bind(this));\n this.$capibara.addEventListener(\"clickNavLeftTreeIcon\", this.clickNavLeftTreeIcon.bind(this));\n this.$capibara.addEventListener(\"mouseOverFloatBox\", this.mouseOverFloatBox.bind(this));\n this.$capibara.addEventListener(\"clickFloatBox\", this.clickFloatBox.bind(this));\n this.$capibara.addEventListener(\"selectTabHeader\", e => {\n this.selectTab(e.detail.tab);\n });\n this.$capibara.addEventListener(\"selectLegendHeader\", this.selectLegend.bind(this));\n this.$capibara.addEventListener(\"selectDay\", this.refreshInputsWithReload.bind(this));\n this.$capibara.addEventListener(\"deselectDay\", this.refreshInputsWithReload.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mousemove\", this.mouseMoveOnFlexBoxContainer.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mouseleave\", this.mouseLeaveOnFloatBoxContainer.bind(this));\n this.$elements.$table.addEventListener(\"mousemove\", this.mouseMoveOnTable.bind(this));\n this.$elements.$table.addEventListener(\"click\", this.clickOnTable.bind(this));\n this.$elements.$table.addEventListener(\"contextmenu\", this.rightClickOnTable.bind(this));\n this.$elements.$container.addEventListener(\"scroll\", this.onScrollContainer.bind(this));\n\n if (this.$elements.$mobileFooter) {\n this.$elements.$mobileFooter.addEventListener(\"click\", this.handleMobileFooterClick.bind(this));\n }\n\n this.$elements.$container.addEventListener(\"clickDate\", this.clickDateHeader.bind(this));\n this.$elements.$container.addEventListener(\"contextMenuDate\", this.contextMenuDateHeader.bind(this));\n window.addEventListener('resize', this.onWindowResize.bind(this));\n document.addEventListener(\"click\", this.handleClickOutside.bind(this));\n }\n /**\n * Funcion para redibujar partes de la planilla, indicado segun parametro\n *\n * options : {\n * floatBox: Boolean,\n * plots: Boolean,\n * header: Boolean,\n * navLeft: Boolean,\n * navRight: Boolean,\n * }\n *\n *\n * @param {Object} options - objecto de configuracion\n */\n\n\n redraw(options) {\n if (options.floatBox) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawFloatBox(this.config, this.tabSelected, this.$elements.$floatBoxContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawBackground(this.config, this.$elements.$background);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawTodayLine(this.config, this.$elements.$todayLine);\n }\n\n if (options.plots) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n }\n\n if (options.header) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeader(this.config, this.$elements.$header);\n\n if (this.config.timeline.header.extend.enabled !== false) {\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(this.config);\n\n if ($headerExtended) {\n this.$elements.$header.append($headerExtended);\n }\n }\n }\n\n if (options.headerTop) {\n this.$elements.$headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeaderTop(this.config, this.tabSelected, this.$elements.$headerTop);\n }\n\n if (options.detailDay) {\n this.hideDetailDay();\n this.lastDataDay = null;\n }\n\n if (options.navLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavLeft(this.$elements.$navLeft, this.config, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(this.config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n\n if (options.cornerLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCorner(this.$elements.$corner, this.config, this.tabSelected);\n }\n\n if (options.cornerRight) {\n this.$elements.$cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCornerRight(this.$elements.$cornerRight, this.config, this.tabSelected);\n }\n\n if (options.navRight) {\n let dataDay = null;\n let daySelected = null;\n\n if (this.selected.length > 0) {\n daySelected = this.selected[0];\n\n if (daySelected.item.data) {\n dataDay = daySelected.item.data.find(d => {\n return d.date == daySelected.date;\n });\n }\n }\n\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected, dataDay, this.selected[0]);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToStart() {\n this.$elements.$container.scrollLeft = 0;\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToEnd() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth;\n }\n /**\n * Mueve el Scroll de la planilla a la tercera parte\n * TODO mejorar logica de esta funcion\n */\n\n\n scrollToMiddle() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth / 3;\n }\n /**\n * Fija las variables de CSs segun Config\n */\n\n\n setAllCSSVariables() {\n let config = this.config; //styleUtils.cleanStyle(config);\n\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setHeaderStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(config, this.isShowNavExtended, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(config, this.isShowNavButtons, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setTableStyle(config);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NhcGliYXJhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvbGliL2NhcGliYXJhLmpzPzBmMGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSAgICAgICAgICAgZnJvbSAnLi4vdXRpbC9kb21VdGlscyc7XG5pbXBvcnQgdXRpbHMgICAgICAgICBmcm9tICcuLi91dGlsL3V0aWxzJztcbi8vaW1wb3J0IGRhdGVVdGlscyAgICAgZnJvbSAnLi4vdXRpbC9kYXRlVXRpbHMnO1xuaW1wb3J0IHRhYmxlRWxlbWVudHMgZnJvbSAnLi4vdXRpbC90YWJsZUVsZW1lbnRzJztcbmltcG9ydCBzdHlsZVV0aWxzICAgIGZyb20gJy4uL3V0aWwvc3R5bGVVdGlscyc7XG5pbXBvcnQgaWNvbnMgICAgICAgICBmcm9tICcuLi91dGlsL2ljb25zJztcblxuLyoqXG4gKiBDYXBpYmFyYSwgcGxhbmlsbGEgcGFyYSBkZXNwbGllZ3VlIGRlIGRhdG9zIHBvciBmZWNoYSBjb21vIEdBTlRUXG4gKiBvcmllbnRhZG8gaW5pY2lhbG1lbnRlIGEgZGF0b3MgZGlhcmlvcyBkZSBpdGVtc1xuICpcbiAqIEBhdXRob3IgUGF0cmljaW8uIE0uIFJvamFzLiA8cGF0cmljaW9AaXJyaWNyb3BzLmNvbT5cbiAqL1xuZXhwb3J0IGNsYXNzIENhcGliYXJhe1xuXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBJbnN0YW5jaWEgdmFyaWFibGVzIGRlIHBsYW5pbGxhIENhcGliYXJhLCBjb24gY29uZmlndXJhY2lvblxuICAgKiBDcmVhIGVsIGVsZW1lbnRvIGNvbnRlbmVkb3Ige2NvbnRhaW5lckVsZW1lbnR9IHNlZ3VuIHNlbGVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzIC0gYXRyaWJ1dG9zIHF1ZSBzZSB1c2FyYW4gYWwgaW5pY2lhciBsYSBwbGFuaWxsYVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcy5jb25maWcgLSBDb25maWd1cmFjaW9uIGRlIHBsYW5pbGxhXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlnfSl7XG4gICAgaWYoY29uZmlnID09IG51bGwpIGNvbnNvbGUuZXJyb3IoXCJjb25maWcgbm8gZWNvbnRyYWRvXCIpO1xuXG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihjb25maWcuc2VsZWN0b3IpO1xuXG4gICAgaWYodGhpcy5jb250YWluZXJFbGVtZW50ID09IG51bGwpIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50byBkb20gc2VndW4gY29uZmlnLnNlbGVjdG9yLCBubyBlbmNvbnRyYWRvXCIpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplZCAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICB0aGlzLiRjYXBpYmFyYSAgICAgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kZWxlbWVudHMgICAgICAgICAgICAgICAgPSB7fTtcbiAgICB0aGlzLnRhYlNlbGVjdGVkICAgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQgICAgICAgICAgPSBbXTtcbiAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkICAgICAgICA9IFtdO1xuICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zICAgICAgICAgID0gW107XG4gICAgdGhpcy5zZWxlY3RlZCAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICB0aGlzLmNvbmZpZyAgICAgICAgICAgICAgICAgICA9IGNvbmZpZztcbiAgICB0aGlzLmxhc3REYXRhRGF5ICAgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCAgICAgICAgPSBmYWxzZTtcbiAgICB0aGlzLmlzU2hvd05hdkluaXRpYWwgICAgICAgICA9IHRydWU7XG4gICAgdGhpcy5pc1Nob3dOYXZCdXR0b25zICAgICAgICAgPSB0cnVlO1xuICAgIHRoaXMuaXNNb2JpbGUgICAgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgdGhpcy5sYXN0TW91c2VQb3NpdGlvbiAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgICAgID0gZmFsc2U7XG4gICAgdGhpcy5pc0Rpc2FibGVkSW5wdXRzTmF2UmlnaHQgPSBmYWxzZTtcbiAgICB0aGlzLm1vYmlsZVNlbGVjdGFibGUgICAgICAgID0gY29uZmlnLnRpbWVsaW5lLm1vYmlsZVNlbGVjdGFibGUgPT09IHRydWU7XG5cbiAgfVxuXG5cblxuXG5cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBQbGFuaWxsYTpcbiAgICogIC0gdmFjaWEgdmFyaWFibGVzIG5lY2VzYXJpYXNcbiAgICogIC0gY3JlYSBwbGFuaWxsYSBsbGFtYW5kbyBhIGRyYXdUYWJsZVxuICAgKiAgLSBBZ3JlZ2EgZXZlbnRvcyBhIHBsYW5pbGxhXG4gICAqICAtIG11ZXZlIHNjcm9sbCBhbCBtZWRpbyBkZSBsYSB0YWJsYVxuICAgKi9cbiAgaW5pdCgpe1xuXG4gICAgdGhpcy50YWJTZWxlY3RlZCAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kY2FwaWJhcmEgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kZWxlbWVudHMgICAgICAgICAgICA9IHt9O1xuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgICAgPSBbXTtcbiAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkICAgID0gW107XG4gICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgICAgICA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWQgICAgICAgICAgICAgPSBbXTtcbiAgICB0aGlzLmxhc3REYXRhRGF5ICAgICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmlzTW9iaWxlICAgICAgICAgICAgID0gdXRpbHMuY2hlY2tJc01vYmlsZSh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSA9IGZhbHNlO1xuICAgIHRoaXMubW9iaWxlU2VsZWN0YWJsZSAgICAgPSB0aGlzLmNvbmZpZy50aW1lbGluZS5tb2JpbGVTZWxlY3RhYmxlID09PSB0cnVlO1xuXG4gICAgdGhpcy5zZXRBbGxDU1NWYXJpYWJsZXMoKTtcbiAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlRGVza3RvcCA9IHRoaXMuY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGVEZXNrdG9wICE9IG51bGwgPyB0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlRGVza3RvcCA6IHRoaXMuY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGU7XG4gICAgdGhpcy5kcmF3VGFibGUoKTtcbiAgICB0aGlzLmFkZEV2ZW50cygpO1xuICAgIHRoaXMuc2Nyb2xsVG9NaWRkbGUoKTtcbiAgICB0aGlzLnRvZ2dsZVNpZGViYXJNb2JpbGUoKTtcbiAgICB0aGlzLnVwZGF0ZU1vYmlsZUZvb3RlclZpc2liaWxpdHkoKTtcbiAgICB0aGlzLnVwZGF0ZU1vYmlsZUZvb3RlckJ1dHRvbnNWaXNpYmlsaXR5KCk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENhbWJpYSBjb25maWd1cmFjaW9uIGRlIHBsYW5pbGxhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIG51ZXZhIHBhcmEgcGxhbmlsbGFcbiAgICovXG4gIHNldENvbmZpZyhjb25maWcpe1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICB9XG5cblxuICAvKipcbiAgICogQ3JlYSBsYSBwbGFuaWxsYVxuICAgKiBhZ3JlZ2FuZG8gdG9kb3MgbG9zIGVsZW1lbnRvcyBlbiBvcmRlbiBkZW50cm9cbiAgICpcbiAgICogQHJldHVybiB7IERvbUVsZW1lbnQgfSAkY2FwaWJhcmEgLSBlbGVtZW50byBkZWwgRG9tIHF1ZSBjb250aWVuZSB0b2RhIGxhIHBsYW5pbGxhXG4gICAqL1xuICBkcmF3VGFibGUoKXtcblxuICAgIGxldCBjb25maWcgICAgICAgID0gdGhpcy5jb25maWdcbiAgICBsZXQgaW5pdGlhbFRhYiAgICA9IGNvbmZpZy50aW1lbGluZS50YWJzWzBdO1xuICAgIGxldCBmaXJzdENoaWxkcmVuID0ge307XG5cbiAgICBpZihjb25maWcuZGF0YSAgJiYgY29uZmlnLmRhdGEubGVuZ3RoID4gMCAmJiBjb25maWcuZGF0YVswXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgIGZpcnN0Q2hpbGRyZW4gPSBjb25maWcuZGF0YVswXS5jaGlsZHJlblswXTtcbiAgICB9XG5cbiAgICBsZXQgJGNhcGliYXJhICAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVBZ1RhYmxlKGNvbmZpZyk7XG4gICAgbGV0ICRjb3JuZXIgICAgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29ybmVyKGNvbmZpZywgaW5pdGlhbFRhYik7XG4gICAgbGV0ICRjb3JuZXJSaWdodCAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29ybmVyUmlnaHQoY29uZmlnKTtcbiAgICBsZXQgJGhlYWRlclRvcCAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVIZWFkZXJUb3AoY29uZmlnKTtcbiAgICBsZXQgJGhlYWRlciAgICAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVIZWFkZXIoY29uZmlnKTtcbiAgICBsZXQgJHRvZGF5TGluZSAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVUb2RheUxpbmUoY29uZmlnKTtcbiAgICBsZXQgJGhlYWRlckV4dGVuZGVkICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVIZWFkZXJFeHRlbmRlZChjb25maWcpO1xuICAgIGxldCAkbmF2TGVmdCAgICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZU5hdkxlZnQoY29uZmlnKVxuICAgIGxldCAkY29ybmVyRm9vdGVyICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUNvcm5lckZvb3Rlcihjb25maWcpO1xuICAgIGxldCAkZm9vdGVyICAgICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUZvb3Rlcihjb25maWcpO1xuICAgIGxldCAkZmxvYXRCb3hDb250YWluZXIgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUZsb2F0Qm94KGNvbmZpZywgaW5pdGlhbFRhYik7XG4gICAgbGV0ICRzZWxlY3RDb250YWluZXIgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlU2VsZWN0Qm9hcmQoY29uZmlnKTtcbiAgICBsZXQgJHBsb3RWZXJ0aWNhbENvbnRhaW5lciAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVQbG90VmVydGljYWxDb250YWluZXIoY29uZmlnKTtcbiAgICBsZXQgJHBsb3RIb3Jpem9udGFsQ29udGFpbmVyID0gdGFibGVFbGVtZW50cy5jcmVhdGVQbG90SG9yaXpvbnRhbENvbnRhaW5lcihjb25maWcpO1xuICAgIGxldCAkZGV0YWlsRGF5ICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZURldGFpbERheShjb25maWcsIGZpcnN0Q2hpbGRyZW4pO1xuXG4gICAgbGV0IHsgZWxlbTokY29udGV4dE1lbnUsIGlzVmlzaWJsZSB9ICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29udGV4dE1lbnUoe2NvbmZpZ30pO1xuICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBpc1Zpc2libGU7XG5cbiAgICBsZXQgJG5hdlJpZ2h0LCBpbnB1dHMsIGlucHV0c1dpdGhSZWxvYWQsIHNhdmVDYW5jZWxCdG5zO1xuICAgICh7ZWxlbWVudDokbmF2UmlnaHQsIGlucHV0cywgaW5wdXRzV2l0aFJlbG9hZCwgc2F2ZUNhbmNlbEJ0bnN9ID0gdGFibGVFbGVtZW50cy5jcmVhdGVOYXZSaWdodChjb25maWcpKTtcblxuICAgIGxldCAkbW9iaWxlRm9vdGVyID0gdGFibGVFbGVtZW50cy5jcmVhdGVNb2JpbGVGb290ZXIoY29uZmlnKTtcblxuICAgIGxldCAkYmFja2dyb3VuZCAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVCYWNrZ3JvdW5kKGNvbmZpZyk7XG4gICAgbGV0ICRjb250YWluZXIgICAgICAgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTpcImNvbnRhaW5lci10bFwifSk7XG4gICAgbGV0ICRkYXlNb3VzZU92ZXIgICAgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJkYXktbW91c2Utb3ZlclwifSk7XG5cbiAgICBsZXQge2hlaWdodCwgd2lkdGggfSA9IHV0aWxzLmdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpO1xuICAgIGxldCAkdGFibGUgICAgICAgICAgID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGFibGVcIiwgc3R5bGU6e1xuICAgICAgJ3dpZHRoJzogd2lkdGgrXCJweFwiLFxuICAgICAgJ2hlaWdodCc6IGhlaWdodCtcInB4XCJcbiAgICB9fSk7XG5cbiAgICAkdGFibGUuYXBwZW5kQ2hpbGQoJGJhY2tncm91bmQpO1xuICAgICR0YWJsZS5hcHBlbmRDaGlsZCgkZGF5TW91c2VPdmVyKTtcbiAgICAkdGFibGUuYXBwZW5kQ2hpbGQoJGRldGFpbERheSk7XG4gICAgJHRhYmxlLmFwcGVuZENoaWxkKCRzZWxlY3RDb250YWluZXIpO1xuICAgICR0YWJsZS5hcHBlbmRDaGlsZCgkZmxvYXRCb3hDb250YWluZXIgKTtcblxuICAgIGlmKCRoZWFkZXJFeHRlbmRlZCl7XG4gICAgICAkaGVhZGVyLmFwcGVuZENoaWxkKCRoZWFkZXJFeHRlbmRlZCk7XG4gICAgfVxuXG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkaGVhZGVyKTtcbiAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRwbG90VmVydGljYWxDb250YWluZXIpO1xuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJHBsb3RIb3Jpem9udGFsQ29udGFpbmVyKTtcbiAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCR0b2RheUxpbmUpO1xuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJG5hdkxlZnQpO1xuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJHRhYmxlKTtcblxuICAgIGlmKCRjb3JuZXJGb290ZXIpICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJGNvcm5lckZvb3Rlcik7XG5cbiAgICBpZigkZm9vdGVyKSAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRmb290ZXIpO1xuXG4gICAgJGNhcGliYXJhLmFwcGVuZENoaWxkKCRoZWFkZXJUb3ApO1xuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29ybmVyKTtcbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJGNvcm5lclJpZ2h0KTtcbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJGNvbnRhaW5lcik7XG4gICAgJGNhcGliYXJhLmFwcGVuZENoaWxkKCRtb2JpbGVGb290ZXIpO1xuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkbmF2UmlnaHQpO1xuICAgIGlmKCRjb250ZXh0TWVudSkgJGNhcGliYXJhLmFwcGVuZENoaWxkKCRjb250ZXh0TWVudSk7XG5cblxuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgPSBpbnB1dHM7XG4gICAgdGhpcy4kaW5wdXRzV2l0aFJlbG9hZCA9IGlucHV0c1dpdGhSZWxvYWQ7XG4gICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgPSBzYXZlQ2FuY2VsQnRucztcbiAgICB0aGlzLiRjYXBpYmFyYSA9ICRjYXBpYmFyYTtcbiAgICB0aGlzLiRlbGVtZW50cyA9IHtcbiAgICAgICRoZWFkZXJUb3AsXG4gICAgICAkZGV0YWlsRGF5LFxuICAgICAgJGNvbnRleHRNZW51LFxuICAgICAgJGZsb2F0Qm94Q29udGFpbmVyLFxuICAgICAgJHNlbGVjdENvbnRhaW5lcixcbiAgICAgICR0YWJsZSxcbiAgICAgICRiYWNrZ3JvdW5kLFxuICAgICAgJHBsb3RWZXJ0aWNhbENvbnRhaW5lcixcbiAgICAgICRwbG90SG9yaXpvbnRhbENvbnRhaW5lcixcbiAgICAgICRkYXlNb3VzZU92ZXIsXG4gICAgICAkY29udGFpbmVyLFxuICAgICAgJG5hdlJpZ2h0LFxuICAgICAgJG5hdkxlZnQsXG4gICAgICAkaGVhZGVyLFxuICAgICAgJHRvZGF5TGluZSxcbiAgICAgICRjb3JuZXIsXG4gICAgICAkY29ybmVyUmlnaHQsXG4gICAgICAkbW9iaWxlRm9vdGVyXG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKCRjYXBpYmFyYSk7XG4gICAgdGhpcy5zZWxlY3RUYWIoaW5pdGlhbFRhYik7XG5cbiAgICByZXR1cm4gJGNhcGliYXJhO1xuICB9XG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIENhbWJpYSBlbCBtb2RvIG9zY3Vybywgc2VndW4gZWwgZXN0YWRvIGFjdHVhbFxuICAgKi9cbiAgdG9nZ2xlRGFyaygpe1xuICAgIHRoaXMuc2V0RGFyayghQm9vbGVhbih0aGlzLmNvbmZpZy50aW1lbGluZS5kYXJrKSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYW1iaWEgZWwgbW9kbyBvc2N1cm8sIHNlZ3VuIHBhcmFtZXRyb1xuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0RhcmsgPSBmYWxzZV0gLSBpbmRpY2Egc2kgc2UgYWN0aXZhIGVsIG1vZG8gb3NjdXJvIG8gbm9cbiAgICovXG4gIHNldERhcmsoIGlzRGFyayA9IGZhbHNlKXtcbiAgICBsZXQgZGFya0NsYXNzTmFtZSA9IFwiZGFyay10aGVtZVwiO1xuICAgIHRoaXMuY29uZmlnLnRpbWVsaW5lLmRhcmsgPSBpc0Rhcms7XG5cbiAgICBpZihpc0Rhcmspe1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChkYXJrQ2xhc3NOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZShkYXJrQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENhbWJpYSBlbCB0ZW1hIGRlIGNvbG9yIHNlY3VuZGFyaW8sIHNlZ3VuIHBhcmFtZXRyb1xuICAgKiAgLVF1aXRhIHRvZG9zIGxvcyBwb3NpYmxlcyBjb2xvcmVzIGRlIGxhIHBsYW5pbGxhLCBvYnRlbmllbmRvbG9zIGRlIFRhYnNcbiAgICogIC1BZ3JlZ2EgZWwgY29sb3IgZW52aWFkbyBwb3IgcGFyYW1ldHJvIGNvbW8gY2xhc2UgZGVsIGRvbUVsZW1lbnQgJGNhcGliYXJhXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb2xvciAtIGNvbG9yLCBjb21vIG5vbWJyZSBkZSBjbGFzZSwgcGFyYSBhZ3JlZ2FyIFxuICAgKi9cbiAgY2hhbmdlQ29sb3JUaGVtZShjb2xvcil7XG4gICAgdGhpcy5jb25maWcudGltZWxpbmUudGFicy5mb3JFYWNoKHRhYiA9PiB7XG4gICAgICB0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3QucmVtb3ZlKHRhYi5jb2xvcik7XG4gICAgfSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChjb2xvcik7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFNlbGVjY2lvbmEgdGFiIGVuIHBsYW5pbGxhXG4gICAqIHNpIHJlZHJhdyA9PSB0cnVlICwgcmVkaWJ1amEgbmF2UmlnaHQgeSBmbG9hdEJveFxuICAgKiB5YSBxdWUgc29uIGlucHV0cyB5IGVzdGV0aWNhcyBwZXJzb25hbGl6YWRhcyBwb3IgVGFiXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YWIgLSB0YWIsIG9idGVuaWRhIGRlc2RlIGNvbmZpZ3VyYWNpb25cbiAgICogQHBhcmFtIHtCb29sZWFufSBbcmVkcmF3PXRydWVdIC0gb3BjaW9uIGRlIHJlZGlidWphZG9cbiAgICovXG4gIHNlbGVjdFRhYih0YWIsIHJlZHJhdyA9IHRydWUpe1xuICAgIGlmKHRhYil7XG4gICAgICB0aGlzLnRhYlNlbGVjdGVkID0gdGFiO1xuXG4gICAgICB0aGlzLmNsZWFuTXVsdGlJbnB1dCgpO1xuXG4gICAgICBpZihyZWRyYXcpe1xuICAgICAgICB0aGlzLnJlZHJhdyh7XG4gICAgICAgICAgaGVhZGVyVG9wOnRydWUsXG4gICAgICAgICAgY29ybmVyTGVmdDogdHJ1ZSxcbiAgICAgICAgICBuYXZMZWZ0OiB0cnVlLFxuICAgICAgICAgIG5hdlJpZ2h0OiB0cnVlLFxuICAgICAgICAgIGZsb2F0Qm94OnRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2VDb2xvclRoZW1lKHRhYi5jb2xvcik7XG5cbiAgICAgIHRoaXMuJGNhcGliYXJhLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0VGFiXCIsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGRldGFpbDp7XG4gICAgICAgICAgdGFiU2VsZWN0ZWQgOiB0aGlzLnRhYlNlbGVjdGVkXG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgIH1lbHNle1xuICAgICAgY29uc29sZS5lcnJvcihcInRhYiBubyBlbmNvbnRyYWRhXCIpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdExlZ2VuZChldnQpe1xuICAgIGxldCBsZWdlbmQgPSBldnQuZGV0YWlsLmxlZ2VuZDtcbiAgICBldnQuZGV0YWlsLiRsZWdlbmQuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcbiAgICBpZihsZWdlbmQpe1xuICAgICAgbGVnZW5kLmFjdGl2ZSA9ICFsZWdlbmQuYWN0aXZlO1xuICAgIH1cblxuICAgIHRoaXMucmVkcmF3KHtcbiAgICAgIGZsb2F0Qm94OiB0cnVlLFxuICAgICAgZGV0YWlsRGF5OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogbXVlc3RyYSBhbHRlcm5hZGFtZW50ZSBsb3Mgc2lkZWJhciBpbml0aWFsIHkgZXh0ZW5kZWRcbiAgICovXG4gIHRvZ2dsZVNpZGViYXIoKXtcbiAgICB0aGlzLnNldFNob3dOYXZJbml0aWFsKCF0aGlzLmlzU2hvd05hdkluaXRpYWwpO1xuICAgIGlmKCF0aGlzLmlzTW9iaWxlKXtcbiAgICAgIHRoaXMuc2V0U2hvd05hdkV4dGVuZGVkKCF0aGlzLmlzU2hvd05hdkV4dGVuZGVkKTtcbiAgICB9ZWxzZXtcbiAgICAgIGxldCBjb3JuZXJJbnB1dFRpdGxlcyA9IHRoaXMuJGVsZW1lbnRzLiRjb3JuZXIucXVlcnlTZWxlY3RvcihcIi5pbnB1dC10aXRsZXNcIik7XG4gICAgICBpZihjb3JuZXJJbnB1dFRpdGxlcyl7XG4gICAgICAgIGNvcm5lcklucHV0VGl0bGVzLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzU2hvd05hdkluaXRpYWwgPyBcIm5vbmVcIjogXCJmbGV4XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jdWx0YSBuYXYgaW5pdGlhbCAsIGV4dGVuZGVkIHkgYnV0dG9uc1xuICAgKi9cbiAgaGlkZVNpZGViYXJzKCl7XG4gICAgdGhpcy5zZXRTaG93TmF2SW5pdGlhbChmYWxzZSk7XG4gICAgdGhpcy5zZXRTaG93TmF2RXh0ZW5kZWQoZmFsc2UpO1xuICAgIHRoaXMuc2V0U2hvd05hdkJ1dHRvbnMoZmFsc2UpO1xuICB9XG5cblxuICAvKipcbiAgICogTXVlc3RyYS9PY3VsdGEgU2lkZWJhciBpbmljaWFsXG4gICAqL1xuICBzZXRTaG93TmF2SW5pdGlhbChpc1Nob3dOYXZJbml0aWFsKXtcbiAgICB0aGlzLmlzU2hvd05hdkluaXRpYWwgID0gaXNTaG93TmF2SW5pdGlhbDtcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRJbml0aWFsU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2SW5pdGlhbCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogTXVlc3RyYS9PY3VsdGEgU2lkZWJhciBleHRlbmRpZG9cbiAgICovXG4gIHNldFNob3dOYXZFeHRlbmRlZChpc1Nob3dOYXZFeHRlbmRlZCl7XG4gICAgdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCA9IGlzU2hvd05hdkV4dGVuZGVkO1xuICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEV4dGVuZGVkU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvT2N1bHRhIFNpZGViYXIgYnV0dG9uc1xuICAgKi9cbiAgc2V0U2hvd05hdkJ1dHRvbnMoaXNTaG93TmF2QnV0dG9ucyl7XG4gICAgdGhpcy5pc1Nob3dOYXZCdXR0b25zID0gaXNTaG93TmF2QnV0dG9ucztcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRCdXR0b25zU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2QnV0dG9ucywgdGhpcy50YWJTZWxlY3RlZCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvb2N1bHRhIFNpZGViYXIgRGVyZWNob1xuICAgKi9cbiAgdG9nZ2xlU2lkZWJhclJpZ2h0KCl7XG4gICAgbGV0IGlzSGlkZGVuID0gIXRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5jb250YWlucyhcImV4dGVuZGVkLXJpZ2h0XCIpO1xuICAgIHRoaXMuc2V0VmlzaWJsZVNpZGViYXJSaWdodCghaXNIaWRkZW4pO1xuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWNhIGxhIG9wY2lvbiBkZSBtb3N0cmFyIHkgb2N1bHRhciBzaWRlYmFyIGRlcmVjaG9cbiAgICpcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gW3Nob3cgPSB0cnVlXSAtIGluZGljYSBzaSBkZWJlIG1vc3RyYXJzZSB1IG9jdWx0YXJzZVxuICAgKi9cbiAgc2V0VmlzaWJsZVNpZGViYXJSaWdodChzaG93ID0gdHJ1ZSl7XG4gICAgbGV0IGZuID0gc2hvdyA/IFwiYWRkXCIgOiBcInJlbW92ZVwiO1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdFtmbl0oXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvb2N1bHRhIEhlYWRlciBleHRlbmRpZG8gKGlucHV0cylcbiAgICovXG4gIHRvZ2dsZUhlYWRlcigpe1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC50b2dnbGUoXCJoZWFkZXItZXh0ZW5kZWRcIik7XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTXVlc3RyYS9vY3VsdGEgYmFycmEgZGUgY2FyZ2EgZGUgcGxhbmlsbGEgXG4gICAqIFNpIHNlIGxsYW1hIHNpbiBwYXJhbWV0cm9zLCBwb3IgZGVmZWN0byBtdWVzdHJhIGVsIGxvYWRpbmcgZGVyZWNob1xuICAgKiBxdWUgY29ycmVzcG9uZGUgYWwgc2lkZWJhci1yaWdodFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW3Bvc2l0aW9uID0gXCJyaWdodFwiXSAtIGVzY29nZSBsb2FkaW5nLCBwdWVkZSBzZXIgXCJsZWZ0XCIgfCBcInJpZ2h0XCJcbiAgICogQHBhcmFtIHtCb29sZWFufSBbc2hvdyA9IHRydWVdIC0gaW5kaWNhIHNpIG1vc3RyYXIgdSBvY3VsdGFyIGxvYWRpbmdcbiAgICovXG4gIGxvYWRpbmcocG9zaXRpb24gPSBcInJpZ2h0XCIsIHNob3cgPSB0cnVlKXtcbiAgICBsZXQgZm4gICAgICA9IHNob3cgPyBcInJlbW92ZVwiIDogXCJhZGRcIjtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuJGNhcGliYXJhLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZ3Jlc3MtYmFyLVwiK3Bvc2l0aW9uKTtcbiAgICBlbGVtZW50LmNsYXNzTGlzdFtmbl0oXCJoaWRlLXByb2dyZXNzXCIpO1xuICB9XG5cblxuXG4gIHNldERpc2FibGVJbnB1dHNOYXZSaWdodChpc0Rpc2FibGVkID0gdHJ1ZSl7XG4gICAgdGhpcy5pc0Rpc2FibGVkSW5wdXRzTmF2UmlnaHQgPSBpc0Rpc2FibGVkO1xuICAgIFxuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0LmZvckVhY2goJGlucHV0Q29udGFpbmVyID0+IHtcbiAgICAgIGxldCAkaW5wdXRzID0gJGlucHV0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKTtcbiAgICAgICRpbnB1dHMuZm9yRWFjaCgkaSA9PiB7XG4gICAgICAgICRpLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIGlzRGlzYWJsZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgbGV0IGJ0bnMgPSB0aGlzLiRzYXZlQ2FuY2VsQnRucy5xdWVyeVNlbGVjdG9yQWxsKFwiYnV0dG9uXCIpO1xuXG4gICAgYnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBpc0Rpc2FibGVkKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEJ1c2NhIHVuIGJvdG9uIHNlZ3VuIHNlbGVjdG9yLCB5IGxlIGFncmVnYSBsYSBjbGFzZSBcImxvYWRpbmdcIlxuICAgKiB5IGRlc2hhYmlsaXRhIGVsIGJvdG9uXG4gICAqXG4gICAqIEBwYXJhbSB7IFN0cmluZyB9IFsgc2VsZWN0b3IgPSAnW2NhcC1idG4tY2FsZW5kYXJdJyBdIC0gc2VsZWN0b3IgZGUgYm90b25cbiAgICogQHBhcmFtIHsgQm9vbGVhbiB9IFtpc0xvYWRpbmcgID0gdHJ1ZV0gLSBkZWZpbmUgc2kgZXN0YSBjYXJnYW5kbyBvIG5vXG4gICAqL1xuICBsb2FkaW5nQnRuKHNlbGVjdG9yPSBcIltjYXAtYnRuLWNhbGVuZGFyXVwiLCBpc0xvYWRpbmcgPSB0cnVlKXtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuJGNhcGliYXJhLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIGlmKGVsZW1lbnQpe1xuICAgICAgbGV0IGZuID0gaXNMb2FkaW5nID8gXCJhZGRcIiA6IFwicmVtb3ZlXCI7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdFtmbl0oXCJsb2FkaW5nXCIpO1xuICAgICAgaWYoaXNMb2FkaW5nKXtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiXCIpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG5cbiAgLyoqXG4gICAqIENyZWEgRXZlbnRvIGRlIGd1YXJkYWRvIGRlIGxvcyBpbnB1dHMgZGVsIFNpZGViYXIgUmlnaHRcbiAgICogb2J0aWVuZSB0b2RvcyBsb3MgdmFsb3JlcyBkZSBsb3MgaW5wdXRzIHJlZ2lzdHJhZG9zIGVuIHRoaXMuJGlucHV0cyB5IFxuICAgKiBsb3MgcmV0b3JuYSBjcmVhbmRvIGVsIGV2ZW50byBcInNhdmVcIlxuICAgKlxuICAgKi9cbiAgc2F2ZUlucHV0c05hdlJpZ2h0KCl7XG5cbiAgICBsZXQgaW5wdXRWYWx1ZXMgPSBbXTtcblxuICAgIGxldCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUlucHV0c05hdlJpZ2h0KCk7XG5cbiAgICBpZighaXNWYWxpZCl7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXREaXNhYmxlSW5wdXRzTmF2UmlnaHQodHJ1ZSk7XG5cbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodC5mb3JFYWNoKCRpbnB1dCA9PiB7XG4gICAgICBsZXQga2V5ID0gJGlucHV0LmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgIGxldCBpbnB1dENvbmZpZyA9IHRoaXMudGFiU2VsZWN0ZWQuaW5wdXRzLmZpbmQodCA9PiB0LmtleSA9PSBrZXkpO1xuICAgICAgaWYoaW5wdXRDb25maWcpe1xuICAgICAgICBpbnB1dFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICBrZXkgICAgICAgICA6IGtleSxcbiAgICAgICAgICBpbnB1dENvbmZpZyA6IGlucHV0Q29uZmlnLFxuICAgICAgICAgIGVsICAgICAgICAgIDogJGlucHV0LFxuICAgICAgICAgIHZhbHVlICAgICAgIDogdGhpcy5nZXRJbnB1dFZhbHVlKCRpbnB1dCwgaW5wdXRDb25maWcpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNhdmVcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOntcbiAgICAgICAgaW5wdXRWYWx1ZXMgOiBpbnB1dFZhbHVlcyxcbiAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWRcbiAgICAgIH1cbiAgICB9KSk7XG5cblxuICB9XG5cbiAgdmFsaWRhdGVJbnB1dHNOYXZSaWdodCgpe1xuICAgIGxldCBpc0Zvcm1WYWxpZCA9IHRydWU7XG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQuZm9yRWFjaCgkaW5wdXQgPT4ge1xuICAgICAgbGV0IGlzSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgICBsZXQga2V5ID0gJGlucHV0LmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgIGxldCBpbnB1dENvbmZpZyA9IHRoaXMudGFiU2VsZWN0ZWQuaW5wdXRzLmZpbmQodCA9PiB0LmtleSA9PSBrZXkpO1xuICAgICAgaWYoaW5wdXRDb25maWcpe1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldElucHV0VmFsdWUoJGlucHV0LCBpbnB1dENvbmZpZyk7XG4gICAgICAgIGlmKGlucHV0Q29uZmlnLnJlcXVpcmVkKXtcbiAgICAgICAgICBpZih2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICBpc0Zvcm1WYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNJbnB1dFZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaW5wdXRDb25maWcudmFsaWRhdGlvbiAmJiAhaW5wdXRDb25maWcudmFsaWRhdGlvbih7dmFsdWUgLCBpbnB1dENvbmZpZywgJGlucHV0fSkgKXtcbiAgICAgICAgICBpc0Zvcm1WYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGlzSW5wdXRWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzSW5wdXRWYWxpZCl7XG4gICAgICAgICAgJGlucHV0LmNsYXNzTGlzdC5hZGQoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAkaW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImlzLWludmFsaWRcIik7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzRm9ybVZhbGlkIDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhbmNlbGEgZm9ybXVsYXJpbyBkZSBzaWRlYmFyIHJpZ2h0XG4gICAqIEVuIG1vYmlsZSwgdGFtYmnDqW4gZGVzYWN0aXZhIGVsIG1vZG8gc2VsZWNjacOzblxuICAgKi9cbiAgY2FuY2VsTXVsdGlJbnB1dCgpe1xuICAgIHRoaXMuJGNhcGliYXJhLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY2FuY2VsXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIGRldGFpbDp7XG4gICAgICAgIHNlbGVjdGVkICAgIDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGFiU2VsZWN0ZWQgOiB0aGlzLnRhYlNlbGVjdGVkXG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMuY2xlYW5NdWx0aUlucHV0KCk7XG4gICAgaWYodGhpcy5pc01vYmlsZSAmJiB0aGlzLm1vYmlsZVNlbGVjdGFibGUpe1xuICAgICAgdGhpcy5tb2JpbGVTZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5tb2JpbGVTZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFNlbGVjdGFibGUoZmFsc2UpO1xuICAgICAgdGhpcy51cGRhdGVNb2JpbGVTZWxlY3RCdXR0b24oKTtcbiAgICAgIHRoaXMudXBkYXRlTW9iaWxlRm9vdGVyQnV0dG9uc1Zpc2liaWxpdHkoKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIExpbXBpYSBlbCBmb3JtdWxhcmlvIGVuIGVsIHNpZGViYXIgcmlnaHRcbiAgICogb2N1bHRhIGVsIHNpZGViYXIgcmlnaHRcbiAgICovXG4gIGNsZWFuTXVsdGlJbnB1dCgpe1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5yZW1vdmUoXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKTtcbiAgfVxuXG5cblxuXG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgdmFsb3IgZGUgdW4gaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW0gLSBlbGVtZW50byBkZWwgZG9tIHF1ZSByZXByZXNlbnRhIGFsIGlucHV0LCBubyBuZWNlc2FyaWFtZW50ZSBpbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gY29uZmlndXJhY2lvbiBkZSBpbnB1dFxuICAgKiBAcmV0dXJuIHsqfSB2YWxvciBkZWwgSW5wdXRcbiAgICovXG4gIGdldElucHV0VmFsdWUoZWxlbSwgaW5wdXRDb25maWcpe1xuICAgIGxldCB2YWx1ZSAgICAgICAgID0gbnVsbDtcbiAgICBsZXQgaW5wdXRFbGVtZW50ICA9IG51bGw7XG4gICAgbGV0IGlucHV0c0VsZW1lbnQgPSBudWxsO1xuXG4gICAgc3dpdGNoIChpbnB1dENvbmZpZy50eXBlKSB7XG5cbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIHZhbHVlID0gaW5wdXRDb25maWcuZ2V0VmFsdWUgPyBpbnB1dENvbmZpZy5nZXRWYWx1ZSh7ZWxlbSwgcHJvcHM6IGlucHV0Q29uZmlnfSkgOiBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICBsZXQgaGhFbGVtZW50PSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIuaG91clwiKTtcbiAgICAgICAgbGV0IG1tRWxlbWVudD0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiLm1pbnV0ZXNcIik7XG4gICAgICAgIGxldCBoaFZhbHVlID0gaGhFbGVtZW50LnZhbHVlO1xuICAgICAgICBsZXQgbW1WYWx1ZSA9IG1tRWxlbWVudC52YWx1ZTtcbiAgICAgICAgaWYoaGhWYWx1ZSl7XG4gICAgICAgICAgaGhWYWx1ZSA9IHBhcnNlRmxvYXQoaGhWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYobW1WYWx1ZSl7XG4gICAgICAgICAgbW1WYWx1ZSA9IHBhcnNlRmxvYXQobW1WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB7aGg6aGhWYWx1ZSwgbW06IG1tVmFsdWV9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIGlucHV0RWxlbWVudCA9IGVsZW0ucXVlcnlTZWxlY3RvcihcInRleHRhcmVhXCIpO1xuICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSB8fCAnJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpbnB1dExpc3RcIjpcbiAgICAgICAgbGV0IHZhbHVlc0lucHV0cyA9IFtdO1xuICAgICAgICBpbnB1dHNFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ11cIik7XG4gICAgICAgIGlucHV0c0VsZW1lbnQuZm9yRWFjaChpbnB1dEVsZW1lbnQgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZUlucHV0ID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmKHZhbHVlSW5wdXQpe1xuICAgICAgICAgICAgdmFsdWVJbnB1dCA9IHBhcnNlRmxvYXQodmFsdWVJbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBsYWJlbCA9IGlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1sYWJlbFwiKTtcbiAgICAgICAgICBsZXQgaWQgPSBpbnB1dEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaW5wdXQtaWRcIik7XG4gICAgICAgICAgdmFsdWVzSW5wdXRzLnB1c2goe2xhYmVsOmxhYmVsLCB2YWx1ZTp2YWx1ZUlucHV0ICwgaWQ6IGlkfSk7XG4gICAgICAgIH0pXG4gICAgICAgIHZhbHVlID0gdmFsdWVzSW5wdXRzO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ11cIik7XG4gICAgICAgIHZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuICAgICAgICBpZih2YWx1ZSl7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFt0eXBlPSdjaGVja2JveCddXCIpO1xuICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC5jaGVja2VkO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwic2VsZWN0LmlucHV0LXNlbGVjdFwiKTtcbiAgICAgICAgbGV0IGlucHV0VmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgIHZhbHVlID0gaW5wdXRDb25maWcub3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PSBpbnB1dFZhbHVlKVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIGlucHV0RWxlbWVudCA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0W3R5cGU9J2ZpbGUnXVwiKTtcbiAgICAgICAgdmFsdWUgPSBpbnB1dEVsZW1lbnQuZmlsZXM7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdpbnB1dC1ib3gnOlxuICAgICAgICBpbnB1dHNFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dFwiKTtcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgaW5wdXRzRWxlbWVudC5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgIGxldCB2ID0gaS52YWx1ZTtcbiAgICAgICAgICBpZih2KXtcbiAgICAgICAgICAgIHYgPSBwYXJzZUZsb2F0KHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZS5wdXNoKHtcbiAgICAgICAgICAgIGlkICAgIDogaS5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1pZFwiKSxcbiAgICAgICAgICAgIGtleSAgIDogaS5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIiksXG4gICAgICAgICAgICB2YWx1ZSA6IHYsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0YS1saXN0JzpcdFxuICAgICAgICBpbnB1dHNFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvblwiKTtcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgaW5wdXRzRWxlbWVudC5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgIGxldCB2ID0gaS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbHVlXCIpXG4gICAgICAgICAgaWYodil7XG4gICAgICAgICAgICB2ID0gcGFyc2VGbG9hdCh2KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUucHVzaCh7XG4gICAgICAgICAgICBpZCAgICA6IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKSxcbiAgICAgICAgICAgIGtleSAgIDogaS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWtleVwiKSxcbiAgICAgICAgICAgIHZhbHVlIDogdiB8fCBudWxsLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgICAgLy9ubyBlcyByZWFsbWVudGUgdW4gaW5wdXQsIGVzIHNvbG8gdW4gdGV4dG9cbiAgICAgICAgLy9ubyBlcyBuZWNlc2FyaW8gb2J0ZW5lciB2YWxvcmVzIGRlIGFxdWlcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgICAgIGlmKGlucHV0RWxlbWVudCl7XG4gICAgICAgICAgdmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBGdW5jaW9uIGxsYW1hZGEgYWwgcGFzYXIgc29icmUgdW4gaXRlbSBkZWwgc2lkZWJhciBpenF1aWVyZG8sIFxuICAgKiBwYXJhIG1vc3RyYXIgdW4gZGV0YWxsZSBkZWwgaXRlbVxuICAgKiBcbiAgICogRWwgZGV0YWxsZSBkZWwgaXRlbSBzZSBhbmNsYSBkZSBtYW5lcmEgc3VwZXJpb3IgbyBpbmZlcmlvciBkZXBlbmRpZW5kbyBkZSBcbiAgICogbGEgcG9zaWNpb24gZWwgbW91c2UgZW4gcGFudGFsbGEsIHBhcmEgbm8gc2FsaXIgZGVsIGNhbXBvIHZpc3VhbCBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtICBFdmVudG8gcmV0b3JuYWRvIHBvciB1biBtb3VzZW92ZXJcbiAgICovXG4gIG92ZXJOYXZJdGVtKGV2dCl7XG4gICAgbGV0IHBvcyAgICAgPSBldnQuZGV0YWlsLnBvcztcbiAgICBsZXQgaXRlbSAgICA9IGV2dC5kZXRhaWwuaXRlbTtcbiAgICAvL2xldCBkYXRhRGF5ID0gZXZ0LmRldGFpbC5kYXRhO1xuICAgIGxldCAkZGV0YWlsID0gdGhpcy4kZWxlbWVudHMuJG5hdkxlZnQucXVlcnlTZWxlY3RvcihcIi5kZXRhaWwtbmF2LWl0ZW1cIik7XG5cbiAgICBpZigkZGV0YWlsLmNsYXNzTGlzdC5jb250YWlucyhcImhpZGVcIikpe1xuICAgICAgJGRldGFpbC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICB9O1xuXG4gICAgJGRldGFpbC5pbm5lckhUTUwgPSB0YWJsZUVsZW1lbnRzLmdldERldGFpbE5hdkl0ZW1Db250ZW50KGl0ZW0pO1xuXG4gICAgaWYocG9zLnlQZXJjZW50ID4gNTApeyAvL21heW9yIGEgNTAlXG4gICAgICBpZighJGRldGFpbC5jbGFzc0xpc3QuY29udGFpbnMoXCJ0by1ib3R0b21cIikpe1xuICAgICAgICAkZGV0YWlsLmNsYXNzTGlzdC5hZGQoXCJ0by1ib3R0b21cIik7XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBpZigkZGV0YWlsLmNsYXNzTGlzdC5jb250YWlucyhcInRvLWJvdHRvbVwiKSl7XG4gICAgICAgICRkZXRhaWwuY2xhc3NMaXN0LnJlbW92ZShcInRvLWJvdHRvbVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkZGV0YWlsLnN0eWxlLnRvcCA9IHBvcy50b3ArXCJweFwiO1xuICB9XG5cblxuICAvKipcbiAgICogT2N1bHRhIGRldGFsbGUgZGUgaXRlbSBlbiBzaWRlYmFyIGl6cXVpZXJkbyBcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtICBFdmVudG8gcmV0b3JuYWRvIHBvciB1biBtb3VzZW92ZXJcbiAgICovXG4gIGxlYXZlTmF2SXRlbSgpe1xuICAgIHRoaXMuJGVsZW1lbnRzLiRuYXZMZWZ0LnF1ZXJ5U2VsZWN0b3IoXCIuZGV0YWlsLW5hdi1pdGVtXCIpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICB9XG5cblxuICAvKipcbiAgICogQ2FwdHVyYSBldmVudG8gbW91c2Vtb3ZlIGRlIGZsb2F0Qm94Q29udGFpbmVyXG4gICAqIHBhcmEgcmVmcmVzY2FyIGxhIHBvc2ljaW9uIHkgZGV0ZW5lciBwb3N0ZXJpb3JlcyBldmVudG9zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2Vtb3ZlXG4gICAqL1xuICBtb3VzZU1vdmVPbkZsZXhCb3hDb250YWluZXIoZXZ0KXtcbiAgICBsZXQgcG9zaXRpb24gPSB1dGlscy5ldmVudFRvUG9zaXRpb24odGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcbiAgICB0aGlzLnJlZnJlc2hEZXRhaWxEYXlQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyYSBldmVudG8gbW91c2VsZWF2ZSBkZSBmbG9hdEJveENvbnRhaW5lclxuICAgKiBwYXJhIG9jdWx0YXIgZGV0YWlsRGF5XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2VsZWF2ZVxuICAgKi9cbiAgbW91c2VMZWF2ZU9uRmxvYXRCb3hDb250YWluZXIoZXZ0KXtcbiAgICB0aGlzLmhpZGVEZXRhaWxEYXkoKTtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamEgZWwgY2xpYyBmdWVyYSBkZWwgZGl2IGVzcGVjw61maWNvXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gRWwgZXZlbnRvIGRlIGNsaWNcbiAgICovXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudCkge1xuICAgIGlmICghdGhpcy5pc01vYmlsZSAmJiB0aGlzLiRlbGVtZW50cyAmJiB0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5ICYmICF0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZWwgZXZlbnRvIG1vdXNlbW92ZSBlbiAkdGFibGUsIHBhcmEgaW5kaWNhciBsYSBwb3NpY2lvbiBkZSAkZGF5TW91c2VPdmVyXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2VsZWF2ZVxuICAgKi9cbiAgbW91c2VNb3ZlT25UYWJsZShldnQpe1xuICAgIGlmKHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUpIHJldHVybjtcbiAgICBsZXQgcG9zID0gdXRpbHMuZXZlbnRUb1Bvc2l0aW9uKHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgaWYodGhpcy5sYXN0TW91c2VQb3NpdGlvbiA9PSBudWxsIHx8IFxuICAgICAgdGhpcy5sYXN0TW91c2VQb3NpdGlvbi5sZWZ0ICE9IHBvcy5sZWZ0IHx8XG4gICAgICB0aGlzLmxhc3RNb3VzZVBvc2l0aW9uLnRvcCAhPSBwb3MudG9wXG4gICAgKXtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRkYXlNb3VzZU92ZXIuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIrcG9zLmxlZnQrXCJweCAsXCIrcG9zLnRvcCtcInB4KVwiO1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmxhc3RNb3VzZVBvc2l0aW9uID0gcG9zO1xuICAgIH1cbiAgfTtcblxuXG5cbiAgcmlnaHRDbGlja09uQ2FwaWJhcmEoZXZ0KXtcbiAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5jb250ZXh0TWVudSl7XG4gICAgICB0aGlzLmhpZGVEZXRhaWxEYXkoKTtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICByaWdodENsaWNrT25UYWJsZShldnQpe1xuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51KXtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnVPblRhYmxlKGV2dCk7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH07XG5cbiAgc2hvd0NvbnRleHRNZW51T25UYWJsZShldnQpe1xuXG4gICAgbGV0IGRhdGUgID0gdXRpbHMuZ2V0RGF5QnlFdmVudCh0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIGxldCBpdGVtICA9IHV0aWxzLmdldEl0ZW1CeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG5cbiAgICBpZih0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51KSB7XG4gICAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vbGV0IHBvc2l0aW9uID0gdXRpbHMuZXZlbnRUb1Bvc2l0aW9uKHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IHsgZWxlbTokZWxlbSwgaXNWaXNpYmxlIH0gPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUNvbnRleHRNZW51KHtcbiAgICAgIHRhYlNlbGVjdGVkOiB0aGlzLnRhYlNlbGVjdGVkLFxuICAgICAgJGNhcGliYXJhRWxlbSA6IHRoaXMuJGNhcGliYXJhLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGV2dCxcbiAgICAgIC8vcG9zaXRpb24sXG4gICAgICBkYXRlLFxuICAgICAgaXRlbSxcbiAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgbmFtZTogXCJvblRhYmxlXCJcbiAgICB9KTtcblxuICAgIGlmKCRlbGVtKXtcbiAgICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBpc1Zpc2libGU7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUucmVwbGFjZVdpdGgoJGVsZW0pO1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51ID0gJGVsZW07XG4gICAgfVxuICAgIGlmKGlzVmlzaWJsZSl7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZWwgZXZlbnRvIGNsaWNrIGVuICR0YWJsZSwgcGFyYSBzZWxlY2Npb25hciBkaWFzXG4gICAqIGxvcyBkaWFzIHNlbGVjY2lvbmFkb3Mgc2UgcmVnaXN0cmFuIGVuIHRoaXMuc2VsZWN0ZWRbXVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gRXZlbnRvIGRlIG1vdXNlbGVhdmVcbiAgICovXG4gIGNsaWNrT25UYWJsZShldnQpe1xuXG4gICAgbGV0IGRhdGUgID0gdXRpbHMuZ2V0RGF5QnlFdmVudCh0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIGxldCBwb3MgICA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbih0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIGxldCBpdGVtICA9IHV0aWxzLmdldEl0ZW1CeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG5cbiAgICAvL2lmKGl0ZW0gPT0gbnVsbCkgcmV0dXJuOyAvLyBjdWFubyBzZSBzZWxlY2Npb25hIHVuIGVzcGFjaW8gbm8gc2VsZWNjaW9uYWJsZVxuXG4gICAgLy9zaSBlcyBtb2JpbGUgeSBzZWxlY2Npw7NuIGRlc2hhYmlsaXRhZGEsIHNvbG8gbXVlc3RyYSBkZXRhbGxlcyAobm8gc2VsZWNjaW9uYSlcbiAgICBsZXQgZGF0YUJ5RGF0ZSA9IF8uZmluZChpdGVtLmRhdGEsIHtkYXRlfSk7XG4gICAgaWYodGhpcy5pc01vYmlsZSAmJiAhdGhpcy5tb2JpbGVTZWxlY3RhYmxlICYmIGRhdGFCeURhdGUpe1xuICAgICAgLy8gc2llbXByZSBhY3R1YWxpemFyIGRldGFpbC1kYXkgKGNvbiBvIHNpbiBkYXRvcykgcGFyYSBxdWUgbXVlc3RyZSBlbCBkw61hIHNlbGVjY2lvbmFkb1xuICAgICAgbGV0IG5ld0REQ29udGVudFN0cmluZyA9IHRhYmxlRWxlbWVudHMucmVkcmF3RGV0YWlsRGF5KHRoaXMuY29uZmlnLCBpdGVtLCBkYXRhQnlEYXRlLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICAgIGlmKG5ld0REQ29udGVudFN0cmluZyl7XG4gICAgICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuaW5uZXJIVE1MID0gbmV3RERDb250ZW50U3RyaW5nO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0RGF0YURheSA9IGRhdGFCeURhdGU7XG4gICAgICB0aGlzLmZvY3VzT25GbG9hdEJveCh7cG9zLCBldnR9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZighdGhpcy5pc1NlbGVjdGFibGUoe2l0ZW0sIGRhdGUsIGRhdGFCeURhdGV9KSl7XG4gICAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNlbGVjdE5vU2VsZWN0YWJsZVwiLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBkZXRhaWw6e1xuICAgICAgICAgIHNlbGVjdGVkICAgIDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWQsXG4gICAgICAgICAgbGFzdFNlbGVjdGlvbiA6IHtkYXRlLCBpdGVtLCBwb3N9LFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICByZXR1cm47IC8vIGN1YW5kbyBzZSBzZWxlY2Npb25hIHVuIGVzcGFjaW8gbm8gc2VsZWNjaW9uYWJsZVxuICAgIH0gXG5cbiAgICBsZXQgZXZlbnROYW1lID0gXCJkZXNlbGVjdERheVwiO1xuXG4gICAgaWYodGhpcy50b2dnbGVTZWxlY3QoZGF0ZSwgaXRlbSwgcG9zKSl7XG4gICAgICBldmVudE5hbWUgPSBcInNlbGVjdERheVwiO1xuICAgIH1cblxuICAgIHRoaXMuJGNhcGliYXJhLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOntcbiAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA6IHtkYXRlLCBpdGVtLCBwb3N9LFxuICAgICAgICBzZWxlY3RlZCAgICA6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRhYlNlbGVjdGVkIDogdGhpcy50YWJTZWxlY3RlZFxuICAgICAgfVxuICAgIH0pKTtcblxuICB9O1xuXG5cblxuXG5cbiAgdG9nZ2xlU2VsZWN0KGRhdGUsIGl0ZW0sIHBvcyl7XG4gICAgaWYodGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgIHRoaXMuZGVzZWxlY3QoZGF0ZSwgaXRlbSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLnNlbGVjdChkYXRlLCBpdGVtLCBwb3MpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuXG5cblxuXG5cbiAgaXNTZWxlY3RlZChkYXRlLCBpdGVtKXtcbiAgICBsZXQgaW5kZXggPSB1dGlscy5pbmRleFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWQsIHtkYXRlLCBpdGVtfSk7XG4gICAgcmV0dXJuIGluZGV4ID4gLTE7XG4gIH07XG5cblxuXG4gIGlzU2VsZWN0YWJsZSh7aXRlbSwgZGF0ZSwgZGF0YUJ5RGF0ZX0pe1xuXG4gICAgaWYoIXRoaXMuY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGUpe1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmKGl0ZW0uc2VsZWN0YWJsZSA9PT0gZmFsc2Upe1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLm5vRnV0dXJlU2VsZWN0YWJsZSl7XG4gICAgICBsZXQgZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGlmKGQgPiB0b2RheSl7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaXRlbUlzU2VsZWN0YWJsZSA9IHRydWU7XG4gICAgaWYodGhpcy50YWJTZWxlY3RlZCAmJiB0aGlzLnRhYlNlbGVjdGVkLnNlbGVjdGFibGVJZkhhcyl7XG4gICAgICBpZighaXRlbS52YWx1ZXNbdGhpcy50YWJTZWxlY3RlZC5zZWxlY3RhYmxlSWZIYXNdKXtcbiAgICAgICAgaXRlbUlzU2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbUlzU2VsZWN0YWJsZTtcbiAgfTtcblxuICByZWRyYXdTZWxlY3Rpb24oKXtcbiAgICAgIHRoaXMuY2hlY2tDbGFzc1NpZGViYXJFeHRlbmRlZFJpZ2h0KCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vYmlsZUZvb3RlclZpc2liaWxpdHkoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9iaWxlRm9vdGVyQnV0dG9uc1Zpc2liaWxpdHkoKTtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3U2VsZWN0Qm9hcmQodGhpcy4kZWxlbWVudHMuJHNlbGVjdENvbnRhaW5lciwgdGhpcy5zZWxlY3RlZCk7XG4gIH07XG5cblxuXG5cblxuXG4gIGRlc2VsZWN0KGRhdGUsIGl0ZW0sIHJlZHJhdyA9IHRydWUpe1xuICAgIGlmKHRoaXMuaXNTZWxlY3RlZChkYXRlLCBpdGVtKSAgKXtcbiAgICAgIGxldCBpbmRleCA9IHV0aWxzLmluZGV4U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZCwge2RhdGUsIGl0ZW19KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEluZGV4VG9TZWxlY3RlZCgpO1xuXG4gICAgaWYocmVkcmF3KXtcbiAgICAgIHRoaXMucmVkcmF3U2VsZWN0aW9uKClcbiAgICB9XG4gIH07XG5cblxuXG5cblxuXG5cbiAgc2VsZWN0KGRhdGUsIGl0ZW0sIHBvcywgcmVkcmF3ID0gdHJ1ZSwgcmVmcmVzaEZvcm0gPSB0cnVlKXtcbiAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcblxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGRhdGUsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIHBvcyxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgZGF0YURheSA9IG51bGw7XG4gICAgICBpZihpdGVtLmRhdGEpe1xuICAgICAgICBkYXRhRGF5ID0gaXRlbS5kYXRhLmZpbmQoZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGQuZGF0ZSA9PSBkYXRlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2kgZXMgZWwgcHJpbWVyIGl0ZW0gc2VsZWNjaW9uYWRvLCBzZSBhdXRvcnJlbGxlbmEgZWwgZm9ybXVsYXJpbyBkZSBuYXZSaWdodCAobm8gZW4gbW9iaWxlIGNvbiBzZWxlY2Npw7NuKVxuICAgICAgaWYodGhpcy5zZWxlY3RlZC5sZW5ndGggPT0gMSAmJiByZWZyZXNoRm9ybSAmJiAhKHRoaXMuaXNNb2JpbGUgJiYgdGhpcy5tb2JpbGVTZWxlY3RhYmxlKSl7XG4gICAgICAgIHRoaXMucmVkcmF3KHtcbiAgICAgICAgICBjb3JuZXJSaWdodDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB7aW5wdXRzLCBlbGVtZW50LCBpbnB1dHNXaXRoUmVsb2FkLCBzYXZlQ2FuY2VsQnRuc30gPSB0YWJsZUVsZW1lbnRzLnJlZHJhd05hdlJpZ2h0KHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kbmF2UmlnaHQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMudGFiU2VsZWN0ZWQsIGRhdGFEYXksIHRoaXMuc2VsZWN0ZWRbMF0pO1xuICAgICAgICB0aGlzLiRlbGVtZW50cy4kbmF2UmlnaHQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLiRpbnB1dHNOYXZSaWdodCA9IGlucHV0cztcbiAgICAgICAgdGhpcy4kaW5wdXRzV2l0aFJlbG9hZCA9IGlucHV0c1dpdGhSZWxvYWQ7XG4gICAgICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zID0gc2F2ZUNhbmNlbEJ0bnM7XG4gICAgICB9XG5cbiAgICB9XG5cblxuICAgIGxldCBmb2N1c2VkID0gZmFsc2U7XG4gICAgaWYoISh0aGlzLmlzTW9iaWxlICYmIHRoaXMubW9iaWxlU2VsZWN0YWJsZSkpe1xuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0LmZvckVhY2goaW5wdXROYXZSaWdodCA9PiB7XG4gICAgICBpZighZm9jdXNlZCl7XG4gICAgICAgIGxldCB2YWxpZElucHV0cyA9IGlucHV0TmF2UmlnaHQucXVlcnlTZWxlY3RvckFsbChcImlucHV0XCIpO1xuICAgICAgICBpZih2YWxpZElucHV0cyAmJiB2YWxpZElucHV0cy5sZW5ndGggPiAwKXtcbiAgICAgICAgICBsZXQgZmlyc3RWYWxpZElucHV0ID0gXy5maXJzdCh2YWxpZElucHV0cyk7XG5cbiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IFxuICAgICAgICAgICAgZmlyc3RWYWxpZElucHV0LmZvY3VzKCk7XG4gICAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgICBmb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SW5kZXhUb1NlbGVjdGVkKCk7XG5cbiAgICBpZihyZWRyYXcpe1xuICAgICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKVxuICAgIH1cbiAgfTtcblxuXG4gIHNldEluZGV4VG9TZWxlY3RlZCgpe1xuICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgocywgaW5kZXgpID0+IHtcbiAgICAgIHMuaW5kZXggPSBpbmRleCsxO1xuICAgIH0pXG4gIH07XG5cblxuICBpc1NlbGVjdGVkQWxsRGF0ZShkYXRlKXtcbiAgICBsZXQgaXNBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcuZGF0YS5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYoIXRoaXMuaXNTZWxlY3RlZChkYXRlLCBpdGVtKSl7XG4gICAgICAgICAgaXNBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gaXNBbGxTZWxlY3RlZDtcbiAgfTtcblxuICBzZWxlY3RCeURhdGUoZGF0ZSl7XG4gICAgdGhpcy5jb25maWcuZGF0YS5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RCeUl0ZW1EYXRlKGRhdGUsIGl0ZW0sIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGRlc2VsZWN0QnlEYXRlKGRhdGUpe1xuICAgIHRoaXMuY29uZmlnLmRhdGEuZm9yRWFjaChwYXJlbnQgPT4ge1xuICAgICAgcGFyZW50LmNoaWxkcmVuLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RCeUl0ZW1EYXRlKGRhdGUsIGl0ZW0sIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgcmVkcmF3ID0gdHJ1ZSwgcmVmcmVzaEZvcm0gPSB0cnVlKXtcbiAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgIGxldCBwb3MgPSB1dGlscy5nZXRQb3NpdGlvbkJ5SXRlbURhdGUodGhpcy5jb25maWcsIGl0ZW0sIGRhdGUpO1xuICAgICAgdGhpcy5zZWxlY3QoZGF0ZSwgaXRlbSwgcG9zLCByZWRyYXcsIHJlZnJlc2hGb3JtKTtcbiAgICB9XG4gIH07XG5cblxuICBkZXNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgcmVkcmF3ID0gdHJ1ZSl7XG4gICAgaWYodGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgIHRoaXMuZGVzZWxlY3QoZGF0ZSwgaXRlbSwgcmVkcmF3KTtcbiAgICB9XG4gIH07XG5cbiAgZGVzZWxlY3RBbGwocmVkcmF3ID0gZmFsc2Upe1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICBpZihyZWRyYXcpe1xuICAgICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH07XG5cblxuXG5cblxuXG4gIGNoZWNrQ2xhc3NTaWRlYmFyRXh0ZW5kZWRSaWdodCgpe1xuICAgIGNvbnN0IHNob3dTaWRlYmFyID0gdGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwICYmICEodGhpcy5pc01vYmlsZSAmJiB0aGlzLm1vYmlsZVNlbGVjdGFibGUpO1xuICAgIGlmKHNob3dTaWRlYmFyKXtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5hZGQoXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5yZW1vdmUoXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlTW9iaWxlRm9vdGVyVmlzaWJpbGl0eSgpe1xuICAgIGNvbnN0ICRmb290ZXIgPSB0aGlzLiRlbGVtZW50cy4kbW9iaWxlRm9vdGVyO1xuICAgIGlmKCEkZm9vdGVyKSByZXR1cm47XG4gICAgY29uc3Qgc2hvd0Zvb3RlciA9IHRoaXMuaXNNb2JpbGUgJiYgdGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZURlc2t0b3AgIT09IGZhbHNlO1xuICAgIGlmKHNob3dGb290ZXIpIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5hZGQoXCJoYXMtbW9iaWxlLWZvb3RlclwiKTtcbiAgICBlbHNlIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5yZW1vdmUoXCJoYXMtbW9iaWxlLWZvb3RlclwiKTtcbiAgfTtcblxuICBoYW5kbGVNb2JpbGVGb290ZXJDbGljayhldnQpe1xuICAgIGlmKGV2dC50YXJnZXQuY2xvc2VzdChcIi5tb2JpbGUtZm9vdGVyLWNhbmNlbFwiKSl7XG4gICAgICB0aGlzLmNhbmNlbE11bHRpSW5wdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgJGJ0biA9IGV2dC50YXJnZXQuY2xvc2VzdChcIi5tb2JpbGUtZm9vdGVyLWJ0bltkYXRhLW1vYmlsZS1idG4taWR4XVwiKTtcbiAgICBpZigkYnRuICYmICEkYnRuLmRpc2FibGVkKXtcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoJGJ0bi5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vYmlsZS1idG4taWR4XCIpLCAxMCk7XG4gICAgICBjb25zdCBidXR0b25zID0gKHRoaXMuY29uZmlnLnRpbWVsaW5lLm1vYmlsZUZvb3RlciAmJiB0aGlzLmNvbmZpZy50aW1lbGluZS5tb2JpbGVGb290ZXIuYnV0dG9ucykgfHwgW107XG4gICAgICBjb25zdCBidG5Db25maWcgPSBidXR0b25zW2luZGV4XTtcbiAgICAgIGlmKGJ0bkNvbmZpZyAmJiB0eXBlb2YgYnRuQ29uZmlnLm9uQ2xpY2sgPT09IFwiZnVuY3Rpb25cIil7XG4gICAgICAgIGJ0bkNvbmZpZy5vbkNsaWNrKHsgZXZ0LCBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG5cblxuICAvKipcbiAgICogb2N1bHRhIGRldGFpbERheSBlbiBlbCBkb20sIHVzYW5kbyBsYSBjbGFzZSBkZC1oaWRlXG4gICAqL1xuICBoaWRlRGV0YWlsRGF5KCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5jbGFzc0xpc3QuYWRkKFwiZGQtaGlkZVwiKTtcbiAgfTtcblxuICBoaWRlQ29udGV4dE1lbnUoKXtcbiAgICBpZih0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUpe1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51LmNsYXNzTGlzdC5hZGQoXCJjbS1oaWRlXCIpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ID0gZmFsc2U7XG4gIH07XG5cblxuICByZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCl7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuc2Nyb2xsTGVmdCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsTGVmdDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxUb3AgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbFRvcDtcblxuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLnNjcm9sbFdpZHRoID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxXaWR0aDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxIZWlnaHQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbEhlaWdodDtcblxuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmJvdW5kaW5nQ2xpZW50VGFibGUgPSB0aGlzLiRlbGVtZW50cy4kdGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuYm91bmRpbmdDbGllbnRDb250YWluZXIgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgcmVmcmVzaFZpcnR1YWxTY3JvbGxWYXJzKCl7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuY29udGFpbmVyV2lkdGggPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLm5hdldpZHRoID0gdGhpcy4kZWxlbWVudHMuJG5hdkxlZnQuY2xpZW50V2lkdGg7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuaGVhZGVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudHMuJGhlYWRlci5jbGllbnRIZWlnaHQ7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5pdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgfVxuXG4gIHJlZnJlc2hWaXJ0dWFsU2Nyb2xsKCl7XG4gICAgbGV0ICRmbG9hdEJveExpc3QgPSB0aGlzLiRlbGVtZW50cy4kZmxvYXRCb3hDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5mbG9hdC1ib3hcIik7XG4gICAgJGZsb2F0Qm94TGlzdC5mb3JFYWNoKGYgPT57XG4gICAgICBpZih0aGlzLmlzVmlzaWJsZUZsb2F0Qm94RWxlbWVudChmKSl7XG4gICAgICAgIGYuc2V0QXR0cmlidXRlKFwiZGF0YS1pcy12aXNpYmxlXCIsIHRydWUpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGYuc2V0QXR0cmlidXRlKFwiZGF0YS1pcy12aXNpYmxlXCIsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaXNWaXNpYmxlRmxvYXRCb3hFbGVtZW50KGYpe1xuICAgIGxldCBjb250YWluZXJXaWR0aCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLmNvbnRhaW5lcldpZHRoO1xuICAgIGxldCBjb250YWluZXJIZWlnaHQgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5jb250YWluZXJIZWlnaHQ7XG4gICAgbGV0IG5hdldpZHRoID0gdXRpbHMudGFibGVQb3NpdGlvbnMubmF2V2lkdGg7XG4gICAgbGV0IGhlYWRlckhlaWdodCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLmhlYWRlckhlaWdodDtcbiAgICBsZXQgZGF5V2lkdGggPSB1dGlscy50YWJsZVBvc2l0aW9ucy5kYXlXaWR0aDtcbiAgICBsZXQgaXRlbUhlaWdodCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLml0ZW1IZWlnaHQ7XG4gICAgbGV0IHNjcm9sbExlZnQgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxMZWZ0O1xuICAgIGxldCBzY3JvbGxUb3AgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxUb3A7XG5cbiAgICBsZXQgbWFyZ2luID0gZGF5V2lkdGg7XG4gICAgbGV0IGxlZnQgPSBwYXJzZUZsb2F0KGYuc3R5bGUubGVmdCk7XG4gICAgbGV0IHRvcCA9IHBhcnNlRmxvYXQoZi5zdHlsZS50b3ApO1xuXG4gICAgbGV0IHZpc2libGVXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC0gbmF2V2lkdGggO1xuICAgIGxldCB2aXNpYmxlSGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gaGVhZGVySGVpZ2h0O1xuXG4gICAgbGV0IGlzVmlzaWJsZUxlZnQgPSAgbGVmdCA+IHNjcm9sbExlZnQgLSBkYXlXaWR0aCAtIG1hcmdpbjtcbiAgICBsZXQgaXNWaXNpYmxlUmlnaHQgPSBsZWZ0IDwgKCBzY3JvbGxMZWZ0ICsgdmlzaWJsZVdpZHRoICsgZGF5V2lkdGggKyBtYXJnaW4pO1xuICAgIGxldCBpc1Zpc2libGVUb3AgPSB0b3AgPiAoc2Nyb2xsVG9wIC0gaXRlbUhlaWdodCAtIG1hcmdpbik7XG4gICAgbGV0IGlzVmlzaWJsZUJvdHRvbSA9IHRvcCA8IChzY3JvbGxUb3AgKyB2aXNpYmxlSGVpZ2h0ICsgaXRlbUhlaWdodCArIG1hcmdpbik7XG5cbiAgICByZXR1cm4gaXNWaXNpYmxlTGVmdCAmJiBpc1Zpc2libGVSaWdodCAmJiBpc1Zpc2libGVUb3AgJiYgaXNWaXNpYmxlQm90dG9tO1xuICB9XG5cblxuICBvblNjcm9sbENvbnRhaW5lcigpe1xuICAgIGlmKCF0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsRGVib3VuY2VkKXtcbiAgICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxEZWJvdW5jZWQgPSB1dGlscy50aHJvdHRsZSh0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsLmJpbmQodGhpcyksIDEwMCwgXG4gICAgICAgIHtsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZX0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsRGVib3VuY2VkKCk7XG4gICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTXVlc3RyYSBEZXRhaWwgZGlhbG9nIHkgUmVmcmVzY2Egc3UgcG9zaWNpb24gXG4gICAqIHVzYW5kbyBlbCBldmVudG8gZGVsIG1vdXNlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBldmVudG8gZGUgbW91c2Vtb3ZlLCBwYXJhIHBvc2ljaW9uZXMgZW4gcGFudGFsbGFcbiAgICovXG4gIHJlZnJlc2hEZXRhaWxEYXlQb3NpdGlvbihwb3NpdGlvbil7XG4gICAgbGV0IGRheVdpZHRoID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLWRheS13aWR0aFwiKSk7XG4gICAgbGV0IGl0ZW1IZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIikpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5zdHlsZS50b3AgID0gcG9zaXRpb24udG9wICsgXCJweFwiO1xuICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuc3R5bGUubGVmdCA9IHBvc2l0aW9uLmxlZnQgKyBkYXlXaWR0aCArIFwicHhcIjtcblxuICAgIGxldCB5UG9zaXRpb25DbGFzcyA9IFwiaGFzLXRvcC1hcnJvd1wiO1xuICAgIGxldCB4UG9zaXRpb25DbGFzcyA9IFwiXCI7XG5cbiAgICAvL2NvbmRpY2lvbiBwYXJhIHByaW1lcmFzIDMgZmlsYXNcbiAgICBpZihwb3NpdGlvbi50b3BDbGllbnQgPD0gaXRlbUhlaWdodCAqMyApe1xuICAgICAgeVBvc2l0aW9uQ2xhc3MgPSBcImhhcy1jZWlsLWFycm93XCI7XG4gICAgfWVsc2UgaWYoIHBvc2l0aW9uLnlQZXJjZW50ID4gMjAgJiZcbiAgICAgIHBvc2l0aW9uLnlQZXJjZW50IDw9IDcwKXsgLy9lbnRyZSAyMCB5IDUwICVcbiAgICAgIHlQb3NpdGlvbkNsYXNzID0gXCJoYXMtbWlkZGxlLWFycm93XCI7XG4gICAgfWVsc2UgaWYocG9zaXRpb24ueVBlcmNlbnQgPiA3MCl7XG4gICAgICB5UG9zaXRpb25DbGFzcyA9IFwiaGFzLWJvdHRvbS1hcnJvd1wiO1xuICAgIH1cblxuICAgIGlmKHBvc2l0aW9uLnhQZXJjZW50ID4gMzAgKXtcbiAgICAgIHhQb3NpdGlvbkNsYXNzID0gXCJoYXMtcmlnaHQtYXJyb3dcIjtcbiAgICB9XG5cbiAgICAvL3F1aXRhIGRkLWhpZGUsIHNvYnJlZXNjcmliaWVuZG8gdG9kYXMgbGFzIGNsYXNlc1xuICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuY2xhc3NOYW1lID0gXCJkZXRhaWwtZGF5IFwiKyB5UG9zaXRpb25DbGFzcyArIFwiIFwiICsgeFBvc2l0aW9uQ2xhc3M7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZXZlbnRvIGNsaWNrIGVuIGJvdG9uIHBhcmEgYWJyaXIgYXJib2wsIGVuIHNpZGViYXIgaXpxdWllcmRvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBvYmpldG8gZXZlbnRvIGNsaWNrXG4gICAqL1xuICBjbGlja05hdkxlZnRUcmVlSWNvbigpe1xuICAgIHRoaXMucmVkcmF3KHtcbiAgICAgIGZsb2F0Qm94OiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgfVxuXG5cbiAgY2xpY2tGbG9hdEJveChldnQpe1xuICAgIGlmKHRoaXMuaXNNb2JpbGUpe1xuICAgICAgdGhpcy5tb3VzZU92ZXJGbG9hdEJveChldnQsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYXB0dXJhIGV2ZW50byBtb3VzZW92ZXIgc29icmUgZWxlbWVudG8gZmxvYXRCb3hcbiAgICogdXNhZGEgcGFyYSBtb3N0cmFyIGRldGFsbGUgZGUgZGlhL2l0ZW0gZGVsIGZsb2F0Ym94XG4gICAqL1xuICBtb3VzZU92ZXJGbG9hdEJveChldnQsIGZvcmNlKXtcbiAgICAgIGxldCBpdGVtICAgID0gZXZ0LmRldGFpbC5pdGVtO1xuICAgICAgbGV0IGRhdGFEYXkgPSBldnQuZGV0YWlsLmRhdGE7XG5cbiAgICAgIC8vdmVyaWZpY2EgcXVlIHNlYW4gZGlhcyBkaXN0aW50b3MsIGNvbXBhcmFuZG9sbyBjb24gZWwgYW50ZXJpb3IsXG4gICAgICAvLyBwYXJhIG5vIGNyZWFyIG51ZXZhbWVudGUgZWwgbWlzbW8gZGV0YWlsLWRheSwgY29uIGxvcyBtaXNtb3MgZGF0b3NcbiAgICAgIGlmKGRhdGFEYXkgIT09IHRoaXMubGFzdERhdGFEYXkgfHwgZm9yY2Upe1xuICAgICAgICBsZXQgbmV3RERDb250ZW50U3RyaW5nID0gdGFibGVFbGVtZW50cy5yZWRyYXdEZXRhaWxEYXkodGhpcy5jb25maWcsIGl0ZW0sIGRhdGFEYXksIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgICAgICBpZihuZXdERENvbnRlbnRTdHJpbmcpe1xuICAgICAgICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuaW5uZXJIVE1MID0gbmV3RERDb250ZW50U3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdERhdGFEYXkgPSBkYXRhRGF5O1xuICAgICAgfVxuICB9XG5cbiAgY2xpY2tEYXRlSGVhZGVyKGV2dCl7XG4gICAgbGV0IGRhdGUgPSBldnQuZGV0YWlsLmRhdGU7XG4gICAgdGhpcy50b2dnbGVTZWxlY3RCeURhdGUoZGF0ZSk7XG4gICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEJ5RGF0ZShkYXRlKXtcbiAgICBpZih0aGlzLmlzU2VsZWN0ZWRBbGxEYXRlKGRhdGUpKXtcbiAgICAgIHRoaXMuZGVzZWxlY3RCeURhdGUoZGF0ZSk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLnNlbGVjdEJ5RGF0ZShkYXRlKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQuc29ydCgocywgbikgPT4ge1xuICAgICAgcmV0dXJuIChuZXcgRGF0ZShzLmRhdGUpKSAtIChuZXcgRGF0ZShuLmRhdGUpKTtcbiAgICB9KTtcbiAgICB0aGlzLnNldEluZGV4VG9TZWxlY3RlZCgpO1xuICB9XG5cblxuICBjb250ZXh0TWVudURhdGVIZWFkZXIoZXZ0KXtcbiAgICBsZXQgbGVmdCA9IGV2dC5kZXRhaWwuY2xpZW50WDtcbiAgICBsZXQgdG9wID0gZXZ0LmRldGFpbC5jbGllbnRZIC0gdGhpcy4kY2FwaWJhcmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIGxldCBkYXRlID0gZXZ0LmRldGFpbC5kYXRlO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2dC5kZXRhaWwuJGVsZW07XG5cbiAgICBsZXQgeyBlbGVtOiRlbGVtLCBpc1Zpc2libGUgfSA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29udGV4dE1lbnUoe1xuICAgICAgdGFiU2VsZWN0ZWQ6IHRoaXMudGFiU2VsZWN0ZWQsXG4gICAgICB0YXJnZXQsXG4gICAgICAkY2FwaWJhcmFFbGVtOiB0aGlzLiRjYXBpYmFyYSxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgIGRhdGUsXG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgbmFtZTogXCJvbkRhdGVIZWFkZXJcIlxuICAgIH0pO1xuXG4gICAgaWYoJGVsZW0pe1xuICAgICAgdGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSA9IGlzVmlzaWJsZTtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb250ZXh0TWVudS5yZXBsYWNlV2l0aCgkZWxlbSk7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUgPSAkZWxlbTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJhIGV2ZW50byB3aW5kb3cgcmVzaXplXG4gICAqIHBhcmEgdmVyaWZpY2FyIHNpIGVzIG1vYmlsZSBvIG5vXG4gICAqL1xuICBvbldpbmRvd1Jlc2l6ZSgpe1xuICAgIGlmKHRoaXMuaW5pdGlhbGl6ZWQpe1xuICAgICAgbGV0IG9sZFZhbHVlID0gdGhpcy5pc01vYmlsZTtcbiAgICAgIGxldCBuZXdWYWx1ZSA9IHV0aWxzLmNoZWNrSXNNb2JpbGUodGhpcy5jb25maWcpO1xuICAgICAgaWYob2xkVmFsdWUgIT0gbmV3VmFsdWUgKXtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IG5ld1ZhbHVlO1xuICAgICAgICB0aGlzLnRvZ2dsZVNpZGViYXJNb2JpbGUoKTtcbiAgICAgICAgdGhpcy51cGRhdGVNb2JpbGVGb290ZXJWaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMuc2V0QWxsQ1NTVmFyaWFibGVzKCk7XG4gICAgICAgIHRoaXMucmVkcmF3KHsgZmxvYXRCb3g6dHJ1ZSwgbmF2TGVmdDp0cnVlLCBoZWFkZXI6dHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FtYmlhIHNpZGViYXIgcGFyYSBtb2JpbGUsIHNlZ3VuIHZhcmlhYmxlIHRoaXMuaXNNb2JpbGVcbiAgICovXG4gIHRvZ2dsZVNpZGViYXJNb2JpbGUoKXtcbiAgICAgIGlmKHRoaXMuaXNNb2JpbGUpe1xuICAgICAgICB0aGlzLnNldFNob3dOYXZJbml0aWFsKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2RXh0ZW5kZWQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNldFNob3dOYXZCdXR0b25zKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRFZGl0YWJsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0YWJsZSh0aGlzLm1vYmlsZVNlbGVjdGFibGUpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuc2V0U2hvd05hdkluaXRpYWwodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0U2hvd05hdkV4dGVuZGVkKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2QnV0dG9ucyh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRFZGl0YWJsZSh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RhYmxlKHRoaXMuY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGVEZXNrdG9wICE9PSBmYWxzZSk7XG4gICAgICB9XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgfVxuXG4gIHNldEVkaXRhYmxlKG5ld0VkaXRhYmxlKXtcbiAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSAhPSBuZXdFZGl0YWJsZSl7XG4gICAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSA9IG5ld0VkaXRhYmxlO1xuICAgICAgdGhpcy5yZWRyYXcoe25hdkxlZnQ6dHJ1ZSwgaGVhZGVyOnRydWV9KTtcbiAgICB9XG4gIH1cblxuICBzZXRTZWxlY3RhYmxlKG5ld1NlbGVjdGFibGUpe1xuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGUgIT0gbmV3U2VsZWN0YWJsZSl7XG4gICAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlID0gbmV3U2VsZWN0YWJsZTtcbiAgICAgIHRoaXMuY2xlYW5NdWx0aUlucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTW9iaWxlU2VsZWN0KCl7XG4gICAgdGhpcy5tb2JpbGVTZWxlY3RhYmxlID0gIXRoaXMubW9iaWxlU2VsZWN0YWJsZTtcbiAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5tb2JpbGVTZWxlY3RhYmxlID0gdGhpcy5tb2JpbGVTZWxlY3RhYmxlO1xuICAgIGlmKHRoaXMuaXNNb2JpbGUpe1xuICAgICAgdGhpcy5zZXRTZWxlY3RhYmxlKHRoaXMubW9iaWxlU2VsZWN0YWJsZSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTW9iaWxlU2VsZWN0QnV0dG9uKCk7XG4gICAgdGhpcy5jaGVja0NsYXNzU2lkZWJhckV4dGVuZGVkUmlnaHQoKTtcbiAgICB0aGlzLnVwZGF0ZU1vYmlsZUZvb3RlclZpc2liaWxpdHkoKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcIm1vYmlsZVNlbGVjdFRvZ2dsZWRcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOiB7IG1vYmlsZVNlbGVjdGFibGU6IHRoaXMubW9iaWxlU2VsZWN0YWJsZSB9XG4gICAgfSkpO1xuICB9XG5cbiAgdXBkYXRlTW9iaWxlU2VsZWN0QnV0dG9uKCl7XG4gICAgbGV0ICRidG4gPSB0aGlzLiRjYXBpYmFyYSAmJiB0aGlzLiRjYXBpYmFyYS5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1tb2JpbGUtc2VsZWN0XVwiKTtcbiAgICBpZighJGJ0bikgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMubW9iaWxlU2VsZWN0YWJsZTtcbiAgICBjb25zdCBsYWJlbCA9IGFjdGl2ZSA/IFwiRGVzYWN0aXZhciBzZWxlY2Npw7NuXCIgOiBcIkFjdGl2YXIgc2VsZWNjacOzbiBkZSBkw61hc1wiO1xuICAgIGNvbnN0IGxhYmVsU3R5bGUgPSBhY3RpdmUgPyBcImRpc3BsYXk6bm9uZVwiIDogXCJcIjtcbiAgICBjb25zdCBjb3VudFN0eWxlID0gYWN0aXZlID8gXCJcIiA6IFwiZGlzcGxheTpub25lXCI7XG4gICAgY29uc3QgY291bnRUZXh0ID0gdGhpcy5zZWxlY3RlZC5sZW5ndGggKyBcIiBkXCI7XG4gICAgJGJ0bi5pbm5lckhUTUwgPSB0aGlzLmdldENoZWNrYm94SWNvbkh0bWwoYWN0aXZlKVxuICAgICAgKyAnPHNwYW4gY2xhc3M9XCJtb2JpbGUtZm9vdGVyLXNlbGVjdC1sYWJlbFwiIHN0eWxlPVwiJyArIGxhYmVsU3R5bGUgKyAnXCI+U2VsZWNjaW9uYXIgZMOtYXM8L3NwYW4+J1xuICAgICAgKyAnPHNwYW4gY2xhc3M9XCJtb2JpbGUtZm9vdGVyLXNlbGVjdC1jb3VudFwiIHN0eWxlPVwiJyArIGNvdW50U3R5bGUgKyAnXCI+JyArIGNvdW50VGV4dCArIFwiPC9zcGFuPlwiO1xuICAgICRidG4uY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiLCBhY3RpdmUpO1xuICAgICRidG4uc2V0QXR0cmlidXRlKFwiYXJpYS1jaGVja2VkXCIsIGFjdGl2ZSk7XG4gICAgJGJ0bi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICAkYnRuLnNldEF0dHJpYnV0ZShcImNhcC10b29sdGlwXCIsIGxhYmVsKTtcbiAgICB0aGlzLnVwZGF0ZU1vYmlsZUZvb3RlckJ1dHRvbnNWaXNpYmlsaXR5KCk7XG4gIH1cblxuICB1cGRhdGVNb2JpbGVGb290ZXJCdXR0b25zVmlzaWJpbGl0eSgpe1xuICAgIGNvbnN0ICRmb290ZXIgPSB0aGlzLiRlbGVtZW50cy4kbW9iaWxlRm9vdGVyO1xuICAgIGlmKCEkZm9vdGVyKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZWN0TW9kZSA9IHRoaXMubW9iaWxlU2VsZWN0YWJsZTtcbiAgICBjb25zdCBoYXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgICBjb25zdCAkY291bnQgPSAkZm9vdGVyLnF1ZXJ5U2VsZWN0b3IoXCIubW9iaWxlLWZvb3Rlci1zZWxlY3QtY291bnRcIik7XG4gICAgaWYoJGNvdW50KSAkY291bnQudGV4dENvbnRlbnQgPSB0aGlzLnNlbGVjdGVkLmxlbmd0aCArIFwiIGRcIjtcbiAgICAkZm9vdGVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1zaG93LXdoZW5dXCIpLmZvckVhY2goKCRlbCkgPT4ge1xuICAgICAgY29uc3Qgc2hvd1doZW4gPSAkZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1zaG93LXdoZW5cIik7XG4gICAgICBsZXQgdmlzaWJsZSA9IHNob3dXaGVuID09PSBcImFsd2F5c1wiIHx8XG4gICAgICAgIChzaG93V2hlbiA9PT0gXCJzZWxlY3RcIiAmJiBzZWxlY3RNb2RlKSB8fFxuICAgICAgICAoc2hvd1doZW4gPT09IFwiZGV0YWlsXCIgJiYgIXNlbGVjdE1vZGUpO1xuICAgICAgaWYoJGVsLmNsYXNzTGlzdC5jb250YWlucyhcIm1vYmlsZS1mb290ZXItY2FuY2VsXCIpKXtcbiAgICAgICAgdmlzaWJsZSA9IHZpc2libGUgJiYgaGFzU2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICAkZWwuY2xhc3NMaXN0LnRvZ2dsZShcIm1vYmlsZS1mb290ZXItYnRuLWhpZGRlblwiLCAhdmlzaWJsZSk7XG4gICAgICBjb25zdCBkaXNhYmxlZFdoZW5Ob1NlbGVjdGlvbiA9ICRlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWRpc2FibGVkLXdoZW4tbm8tc2VsZWN0aW9uXCIpID09PSBcInRydWVcIjtcbiAgICAgIGNvbnN0IGRpc2FibGVkID0gZGlzYWJsZWRXaGVuTm9TZWxlY3Rpb24gJiYgc2VsZWN0TW9kZSAmJiAhaGFzU2VsZWN0ZWQ7XG4gICAgICAkZWwuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENoZWNrYm94SWNvbkh0bWwoY2hlY2tlZCl7XG4gICAgaWYoaWNvbnMuZ2V0Q2hlY2tib3hJY29uKSByZXR1cm4gaWNvbnMuZ2V0Q2hlY2tib3hJY29uKGNoZWNrZWQpO1xuICAgIGNvbnN0IHBhdGggPSBjaGVja2VkXG4gICAgICA/IFwiTTEwLDE3TDUsMTJMNi40MSwxMC41OEwxMCwxNC4xN0wxNy41OSw2LjU4TDE5LDhNMTksM0g1QzMuODksMyAzLDMuODkgMyw1VjE5QTIsMiAwIDAsMCA1LDIxSDE5QTIsMiAwIDAsMCAyMSwxOVY1QzIxLDMuODkgMjAuMSwzIDE5LDNaXCJcbiAgICAgIDogXCJNMTksM0g1QTIsMiAwIDAsMCAzLDVWMTlBMiwyIDAgMCwwIDUsMjFIMTlBMiwyIDAgMCwwIDIxLDE5VjVBMiwyIDAgMCwwIDE5LDNNMTksNVYxOUg1VjVIMTlaXCI7XG4gICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImNoZWNrYm94LWljb25cIj48c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIicgKyBwYXRoICsgJ1wiLz48L3N2Zz48L3NwYW4+JztcbiAgfVxuXG4gIGZvY3VzT25GbG9hdEJveCh7cG9zLCBldnR9KXtcbiAgICBpZih0aGlzLmlzTW9iaWxlKXtcbiAgICAgIGxldCBjb250YWluZXJXaWR0aCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICBsZXQgZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICAgIGxldCBuYXZXaWR0aCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1uYXYtd2lkdGhcIikpO1xuICAgICAgbGV0IGxlZnQgPSBwb3MubGVmdCAtIGNvbnRhaW5lcldpZHRoICsgMS41ICogZGF5V2lkdGggKyBuYXZXaWR0aDtcblxuICAgICAgLy9sZXQgY29udGFpbmVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICBsZXQgaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG4gICAgICAvL2xldCBoZWFkZXJIZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0taGVhZGVyLWhlaWdodFwiKSk7XG4gICAgICBsZXQgdG9wID0gcG9zLnRvcCAtIDAuNSAqIGl0ZW1IZWlnaHQ7XG5cbiAgICAgIGxldCBwb3NpdGlvbiA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbih0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgICAgdGhpcy5yZWZyZXNoRGV0YWlsRGF5UG9zaXRpb24oe1xuICAgICAgICAuLi5wb3NpdGlvbixcbiAgICAgICAgdG9wQ2xpZW50IDogcG9zaXRpb24ueUlubmVyUGVyY2VudCA+PSA3MCA/IHBvc2l0aW9uLnRvcENsaWVudCA6IDAsIC8vIGZ1ZXJ6YSBwb3NpY2lvbiBkZSBhcnJvdyBlbiBkZXRhaWxkYXlcbiAgICAgICAgeFBlcmNlbnQgIDogcG9zaXRpb24ueCA8IDQgPyAwOiAxMDAgIC8vIGZ1ZXJ6YSBhcnJvdyByaWdodFxuICAgICAgfSk7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbCh7XG4gICAgICAgIHRvcCwgbGVmdCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkKHtkZXRhaWx9KXtcbiAgICBpZih0aGlzLmlzTW9iaWxlICYmIHRoaXMubW9iaWxlU2VsZWN0YWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuJGlucHV0c1dpdGhSZWxvYWQgPSB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkLm1hcCgoeyAkaW5wdXQsIGNvbmZpZ30pID0+IHtcbiAgICAgIGxldCBsYXN0U2VsZWN0aW9uID0gZGV0YWlsICYmIGRldGFpbC5sYXN0U2VsZWN0aW9uID8gZGV0YWlsLmxhc3RTZWxlY3Rpb24gOiBudWxsO1xuICAgICAgbGV0IG5ld0lucHV0ID0gdGFibGVFbGVtZW50cy5jcmVhdGVJbnB1dChjb25maWcsIG51bGwsIGxhc3RTZWxlY3Rpb24sIGRldGFpbC5zZWxlY3RlZCk7XG4gICAgICAkaW5wdXQucGFyZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQobmV3SW5wdXQsICRpbnB1dCk7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLiRpbnB1dHNOYXZSaWdodC5pbmRleE9mKCRpbnB1dCk7XG4gICAgICBpZihpbmRleCA+PSAwKXtcbiAgICAgICAgdGhpcy4kaW5wdXRzTmF2UmlnaHRbaW5kZXhdID0gbmV3SW5wdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyRpbnB1dDogbmV3SW5wdXQsIGNvbmZpZ31cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQWdyZWdhIGV2ZW50b3MgYSBsb3MgZWxlbWVudG9zIGRlbCBkb20gZGUgbGEgcGxhbmlsbGFcbiAgICogdXNhbmRvIGVsIG9iamVjdG8gJGNhcGliYXJhXG4gICAqL1xuICBhZGRFdmVudHMoKXtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiAgICAgICAgICAgICAgICAsIHRoaXMuaGlkZUNvbnRleHRNZW51LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiICAgICAgICAgICwgdGhpcy5yaWdodENsaWNrT25DYXBpYmFyYS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlRGFya1wiICAgICAgICAgICAsIHRoaXMudG9nZ2xlRGFyay5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlSGVhZGVyXCIgICAgICAgICAsIHRoaXMudG9nZ2xlSGVhZGVyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b2dnbGVNb2JpbGVTZWxlY3RcIiAgICwgdGhpcy50b2dnbGVNb2JpbGVTZWxlY3QuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInRvZ2dsZVNpZGViYXJcIiAgICAgICAgLCB0aGlzLnRvZ2dsZVNpZGViYXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInRvZ2dsZVNpZGViYXJSaWdodFwiICAgLCB0aGlzLnRvZ2dsZVNpZGViYXJSaWdodC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2F2ZU11bHRpSW5wdXRcIiAgICAgICAsIHRoaXMuc2F2ZUlucHV0c05hdlJpZ2h0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJjYW5jZWxNdWx0aUlucHV0XCIgICAgICwgdGhpcy5jYW5jZWxNdWx0aUlucHV0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJvdmVyTmF2SXRlbVwiICAgICAgICAgICwgdGhpcy5vdmVyTmF2SXRlbS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwibGVhdmVOYXZJdGVtXCIgICAgICAgICAsIHRoaXMubGVhdmVOYXZJdGVtLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja05hdkxlZnRUcmVlSWNvblwiICwgdGhpcy5jbGlja05hdkxlZnRUcmVlSWNvbi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VPdmVyRmxvYXRCb3hcIiAgICAsIHRoaXMubW91c2VPdmVyRmxvYXRCb3guYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrRmxvYXRCb3hcIiAgICAsIHRoaXMuY2xpY2tGbG9hdEJveC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0VGFiSGVhZGVyXCIgICAgICAsIGUgPT4geyB0aGlzLnNlbGVjdFRhYihlLmRldGFpbC50YWIpOyB9KTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0TGVnZW5kSGVhZGVyXCIgICAsIHRoaXMuc2VsZWN0TGVnZW5kLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdERheVwiICAgLCB0aGlzLnJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJkZXNlbGVjdERheVwiICAgLCB0aGlzLnJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5tb3VzZU1vdmVPbkZsZXhCb3hDb250YWluZXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIHRoaXMubW91c2VMZWF2ZU9uRmxvYXRCb3hDb250YWluZXIuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50cy4kdGFibGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm1vdXNlTW92ZU9uVGFibGUuYmluZCh0aGlzKSApO1xuICAgIHRoaXMuJGVsZW1lbnRzLiR0YWJsZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja09uVGFibGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kZWxlbWVudHMuJHRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLnJpZ2h0Q2xpY2tPblRhYmxlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25TY3JvbGxDb250YWluZXIuYmluZCh0aGlzKSk7XG5cbiAgICBpZih0aGlzLiRlbGVtZW50cy4kbW9iaWxlRm9vdGVyKXtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRtb2JpbGVGb290ZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGFuZGxlTW9iaWxlRm9vdGVyQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tEYXRlXCIsIHRoaXMuY2xpY2tEYXRlSGVhZGVyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRNZW51RGF0ZVwiLCB0aGlzLmNvbnRleHRNZW51RGF0ZUhlYWRlci5iaW5kKHRoaXMpKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLHRoaXMub25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlLmJpbmQodGhpcykpO1xuICB9XG5cblxuXG5cbiAgLyoqXG4gICAqIEZ1bmNpb24gcGFyYSByZWRpYnVqYXIgcGFydGVzIGRlIGxhIHBsYW5pbGxhLCBpbmRpY2FkbyBzZWd1biBwYXJhbWV0cm9cbiAgICpcbiAgICogICAgb3B0aW9ucyA6IHtcbiAgICogICAgICAgICAgICBmbG9hdEJveDogQm9vbGVhbixcbiAgICogICAgICAgICAgICBwbG90czogQm9vbGVhbixcbiAgICogICAgICAgICAgICBoZWFkZXI6IEJvb2xlYW4sXG4gICAqICAgICAgICAgICAgbmF2TGVmdDogQm9vbGVhbixcbiAgICogICAgICAgICAgICBuYXZSaWdodDogQm9vbGVhbixcbiAgICogICAgfVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9iamVjdG8gZGUgY29uZmlndXJhY2lvblxuICAgKi9cbiAgcmVkcmF3KG9wdGlvbnMpe1xuXG4gICAgaWYob3B0aW9ucy5mbG9hdEJveCl7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd0Zsb2F0Qm94KHRoaXMuY29uZmlnLCB0aGlzLnRhYlNlbGVjdGVkLCB0aGlzLiRlbGVtZW50cy4kZmxvYXRCb3hDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdCYWNrZ3JvdW5kKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kYmFja2dyb3VuZCk7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd1Bsb3RWZXJ0aWNhbENvbnRhaW5lcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJHBsb3RWZXJ0aWNhbENvbnRhaW5lcik7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd1Bsb3RIb3Jpem9udGFsQ29udGFpbmVyKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kcGxvdEhvcml6b250YWxDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdUb2RheUxpbmUodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiR0b2RheUxpbmUpO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMucGxvdHMpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90VmVydGljYWxDb250YWluZXIodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRwbG90VmVydGljYWxDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJHBsb3RIb3Jpem9udGFsQ29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmhlYWRlcil7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd0hlYWRlcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJGhlYWRlcik7XG4gICAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmVuYWJsZWQgIT09IGZhbHNlKXtcbiAgICAgICAgbGV0ICRoZWFkZXJFeHRlbmRlZCA9IHRhYmxlRWxlbWVudHMuY3JlYXRlSGVhZGVyRXh0ZW5kZWQodGhpcy5jb25maWcpO1xuICAgICAgICBpZigkaGVhZGVyRXh0ZW5kZWQpe1xuICAgICAgICAgIHRoaXMuJGVsZW1lbnRzLiRoZWFkZXIuYXBwZW5kKCRoZWFkZXJFeHRlbmRlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmhlYWRlclRvcCl7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kaGVhZGVyVG9wID0gdGFibGVFbGVtZW50cy5yZWRyYXdIZWFkZXJUb3AodGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQsIHRoaXMuJGVsZW1lbnRzLiRoZWFkZXJUb3ApO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuZGV0YWlsRGF5KXtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgICAgdGhpcy5sYXN0RGF0YURheSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5uYXZMZWZ0KXtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3TmF2TGVmdCh0aGlzLiRlbGVtZW50cy4kbmF2TGVmdCwgdGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgICAgc3R5bGVVdGlscy5zZXROYXZTdHlsZSh0aGlzLmNvbmZpZyk7XG4gICAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRJbml0aWFsU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2SW5pdGlhbCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRFeHRlbmRlZFN0eWxlKHRoaXMuY29uZmlnLCB0aGlzLmlzU2hvd05hdkV4dGVuZGVkLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmNvcm5lckxlZnQpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdDb3JuZXIodGhpcy4kZWxlbWVudHMuJGNvcm5lciwgdGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuY29ybmVyUmlnaHQpe1xuICAgICAgICB0aGlzLiRlbGVtZW50cy4kY29ybmVyUmlnaHQgPSB0YWJsZUVsZW1lbnRzLnJlZHJhd0Nvcm5lclJpZ2h0KHRoaXMuJGVsZW1lbnRzLiRjb3JuZXJSaWdodCwgdGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMubmF2UmlnaHQpe1xuICAgICAgbGV0IGRhdGFEYXkgPSBudWxsO1xuICAgICAgbGV0IGRheVNlbGVjdGVkID0gbnVsbDtcblxuICAgICAgaWYodGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwKXtcbiAgICAgICAgZGF5U2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkWzBdXG4gICAgICAgIGlmKGRheVNlbGVjdGVkLml0ZW0uZGF0YSl7XG4gICAgICAgICAgZGF0YURheSA9IGRheVNlbGVjdGVkLml0ZW0uZGF0YS5maW5kKGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZSA9PSBkYXlTZWxlY3RlZC5kYXRlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCB7aW5wdXRzLCBlbGVtZW50LCBpbnB1dHNXaXRoUmVsb2FkLCBzYXZlQ2FuY2VsQnRuc30gPSB0YWJsZUVsZW1lbnRzLnJlZHJhd05hdlJpZ2h0KHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kbmF2UmlnaHQsIHRoaXMuc2VsZWN0ZWQgLCB0aGlzLnRhYlNlbGVjdGVkLCBkYXRhRGF5LCB0aGlzLnNlbGVjdGVkWzBdKTtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRuYXZSaWdodCA9IGVsZW1lbnQ7XG4gICAgICB0aGlzLiRpbnB1dHNOYXZSaWdodCAgICAgPSBpbnB1dHM7XG4gICAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkID0gaW5wdXRzV2l0aFJlbG9hZDtcbiAgICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zID0gc2F2ZUNhbmNlbEJ0bnM7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcblxuICB9XG5cblxuICAvKipcbiAgICogTXVldmUgZWwgU2Nyb2xsIGRlIGxhIHBsYW5pbGxhIGFsIGluaWNpb1xuICAgKi9cbiAgc2Nyb2xsVG9TdGFydCgpe1xuICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsTGVmdCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogTXVldmUgZWwgU2Nyb2xsIGRlIGxhIHBsYW5pbGxhIGFsIGluaWNpb1xuICAgKi9cbiAgc2Nyb2xsVG9FbmQoKXtcbiAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbExlZnQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIE11ZXZlIGVsIFNjcm9sbCBkZSBsYSBwbGFuaWxsYSBhIGxhIHRlcmNlcmEgcGFydGVcbiAgICogVE9ETyBtZWpvcmFyIGxvZ2ljYSBkZSBlc3RhIGZ1bmNpb25cbiAgICovXG4gIHNjcm9sbFRvTWlkZGxlKCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxXaWR0aCAvIDM7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEZpamEgbGFzIHZhcmlhYmxlcyBkZSBDU3Mgc2VndW4gQ29uZmlnXG4gICAqL1xuICBzZXRBbGxDU1NWYXJpYWJsZXMoKXtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgLy9zdHlsZVV0aWxzLmNsZWFuU3R5bGUoY29uZmlnKTtcbiAgICBzdHlsZVV0aWxzLnNldEhlYWRlclN0eWxlKGNvbmZpZyk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZTdHlsZShjb25maWcpO1xuICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEluaXRpYWxTdHlsZShjb25maWcsIHRoaXMuaXNTaG93TmF2SW5pdGlhbCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0RXh0ZW5kZWRTdHlsZShjb25maWcsIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEJ1dHRvbnNTdHlsZShjb25maWcsIHRoaXMuaXNTaG93TmF2QnV0dG9ucywgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgc3R5bGVVdGlscy5zZXRUYWJsZVN0eWxlKGNvbmZpZyk7XG4gIH1cblxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQXFCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQTNHQTtBQUNBO0FBNEdBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBSEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFKQTtBQUhBO0FBV0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBem9EQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/lib/capibara.js\n");
|
|
187
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Capibara\", function() { return Capibara; });\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_tableElements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/tableElements */ \"./src/util/tableElements.js\");\n/* harmony import */ var _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/styleUtils */ \"./src/util/styleUtils.js\");\n/* harmony import */ var _util_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/icons */ \"./src/util/icons.js\");\n\n //import dateUtils from '../util/dateUtils';\n\n\n\n\n/**\n * Capibara, planilla para despliegue de datos por fecha como GANTT\n * orientado inicialmente a datos diarios de items\n *\n * @author Patricio. M. Rojas. <patricio@irricrops.com>\n */\n\nclass Capibara {\n /**\n * @constructor\n * Instancia variables de planilla Capibara, con configuracion\n * Crea el elemento contenedor {containerElement} segun selector\n *\n * @param {Object} attributes - atributos que se usaran al iniciar la planilla\n * @param {Object} attributes.config - Configuracion de planilla\n */\n constructor({\n config\n }) {\n if (config == null) console.error(\"config no econtrado\");\n this.containerElement = document.querySelector(config.selector);\n if (this.containerElement == null) console.error(\"Elemento dom segun config.selector, no encontrado\");\n this.initialized = false;\n this.$capibara = null;\n this.$elements = {};\n this.tabSelected = null;\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.config = config;\n this.lastDataDay = null;\n this.lastFocusedDay = null;\n this.isShowNavExtended = false;\n this.isShowNavInitial = true;\n this.isShowNavButtons = true;\n this.isMobile = false;\n this.lastMousePosition = null;\n this.isVisibleContextMenu = false;\n this.isDisabledInputsNavRight = false;\n this.mobileSelectable = config.timeline.mobileSelectable === true;\n }\n /**\n * Inicializa Planilla:\n * - vacia variables necesarias\n * - crea planilla llamando a drawTable\n * - Agrega eventos a planilla\n * - mueve scroll al medio de la tabla\n */\n\n\n init() {\n this.tabSelected = null;\n this.$capibara = null;\n this.$elements = {};\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.lastDataDay = null;\n this.lastFocusedDay = null;\n this.isMobile = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile(this.config);\n this.isVisibleContextMenu = false;\n this.mobileSelectable = this.config.timeline.mobileSelectable === true;\n this.setAllCSSVariables();\n this.config.timeline.selectableDesktop = this.config.timeline.selectableDesktop != null ? this.config.timeline.selectableDesktop : this.config.timeline.selectable;\n this.drawTable();\n this.addEvents();\n this.scrollToMiddle();\n this.toggleSidebarMobile();\n this.updateMobileFooterVisibility();\n this.updateMobileFooterButtonsVisibility();\n this.initialized = true;\n }\n /**\n * Cambia configuracion de planilla\n *\n * @param {Object} config - Configuracion nueva para planilla\n */\n\n\n setConfig(config) {\n this.config = config;\n }\n /**\n * Crea la planilla\n * agregando todos los elementos en orden dentro\n *\n * @return { DomElement } $capibara - elemento del Dom que contiene toda la planilla\n */\n\n\n drawTable() {\n let config = this.config;\n let initialTab = config.timeline.tabs[0];\n let firstChildren = {};\n\n if (config.data && config.data.length > 0 && config.data[0].children.length > 0) {\n firstChildren = config.data[0].children[0];\n }\n\n let $capibara = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createAgTable(config);\n let $corner = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCorner(config, initialTab);\n let $cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerRight(config);\n let $headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderTop(config);\n let $header = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeader(config);\n let $todayLine = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createTodayLine(config);\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(config);\n let $navLeft = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavLeft(config);\n let $cornerFooter = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerFooter(config);\n let $footer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFooter(config);\n let $floatBoxContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFloatBox(config, initialTab);\n let $selectContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createSelectBoard(config);\n let $plotVerticalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotVerticalContainer(config);\n let $plotHorizontalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotHorizontalContainer(config);\n let $detailDay = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createDetailDay(config, firstChildren);\n let {\n elem: $contextMenu,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n config\n });\n this.isVisibleContextMenu = isVisible;\n let $navRight, inputs, inputsWithReload, saveCancelBtns;\n ({\n element: $navRight,\n inputs,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavRight(config));\n let $mobileFooter = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createMobileFooter(config);\n let $background = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createBackground(config);\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"container-tl\"\n });\n let $dayMouseOver = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"day-mouse-over\"\n });\n let {\n height,\n width\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let $table = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"table\",\n style: {\n 'width': width + \"px\",\n 'height': height + \"px\"\n }\n });\n $table.appendChild($background);\n $table.appendChild($dayMouseOver);\n $table.appendChild($detailDay);\n $table.appendChild($selectContainer);\n $table.appendChild($floatBoxContainer);\n\n if ($headerExtended) {\n $header.appendChild($headerExtended);\n }\n\n $container.appendChild($header);\n $container.appendChild($plotVerticalContainer);\n $container.appendChild($plotHorizontalContainer);\n $container.appendChild($todayLine);\n $container.appendChild($navLeft);\n $container.appendChild($table);\n if ($cornerFooter) $container.appendChild($cornerFooter);\n if ($footer) $container.appendChild($footer);\n $capibara.appendChild($headerTop);\n $capibara.appendChild($corner);\n $capibara.appendChild($cornerRight);\n $capibara.appendChild($container);\n $capibara.appendChild($mobileFooter);\n $capibara.appendChild($navRight);\n if ($contextMenu) $capibara.appendChild($contextMenu);\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n this.$capibara = $capibara;\n this.$elements = {\n $headerTop,\n $detailDay,\n $contextMenu,\n $floatBoxContainer,\n $selectContainer,\n $table,\n $background,\n $plotVerticalContainer,\n $plotHorizontalContainer,\n $dayMouseOver,\n $container,\n $navRight,\n $navLeft,\n $header,\n $todayLine,\n $corner,\n $cornerRight,\n $mobileFooter\n };\n this.containerElement.innerHTML = \"\";\n this.containerElement.appendChild($capibara);\n this.selectTab(initialTab);\n return $capibara;\n }\n /**\n * Cambia el modo oscuro, segun el estado actual\n */\n\n\n toggleDark() {\n this.setDark(!Boolean(this.config.timeline.dark));\n }\n /**\n * Cambia el modo oscuro, segun parametro\n *\n * @param {Boolean} [isDark = false] - indica si se activa el modo oscuro o no\n */\n\n\n setDark(isDark = false) {\n let darkClassName = \"dark-theme\";\n this.config.timeline.dark = isDark;\n\n if (isDark) {\n this.$capibara.classList.add(darkClassName);\n } else {\n this.$capibara.classList.remove(darkClassName);\n }\n }\n /**\n * Cambia el tema de color secundario, segun parametro\n * -Quita todos los posibles colores de la planilla, obteniendolos de Tabs\n * -Agrega el color enviado por parametro como clase del domElement $capibara\n *\n * @param {String} color - color, como nombre de clase, para agregar \n */\n\n\n changeColorTheme(color) {\n this.config.timeline.tabs.forEach(tab => {\n this.$capibara.classList.remove(tab.color);\n });\n this.$capibara.classList.add(color);\n }\n /**\n * Selecciona tab en planilla\n * si redraw == true , redibuja navRight y floatBox\n * ya que son inputs y esteticas personalizadas por Tab\n *\n * @param {Object} tab - tab, obtenida desde configuracion\n * @param {Boolean} [redraw=true] - opcion de redibujado\n */\n\n\n selectTab(tab, redraw = true) {\n if (tab) {\n this.tabSelected = tab;\n this.cleanMultiInput();\n\n if (redraw) {\n this.redraw({\n headerTop: true,\n cornerLeft: true,\n navLeft: true,\n navRight: true,\n floatBox: true\n });\n }\n\n this.changeColorTheme(tab.color);\n this.$capibara.dispatchEvent(new CustomEvent(\"selectTab\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tabSelected: this.tabSelected\n }\n }));\n } else {\n console.error(\"tab no encontrada\");\n }\n }\n\n selectLegend(evt) {\n let legend = evt.detail.legend;\n evt.detail.$legend.classList.toggle(\"active\");\n\n if (legend) {\n legend.active = !legend.active;\n }\n\n this.redraw({\n floatBox: true,\n detailDay: true\n });\n }\n /**\n * muestra alternadamente los sidebar initial y extended\n */\n\n\n toggleSidebar() {\n this.setShowNavInitial(!this.isShowNavInitial);\n\n if (!this.isMobile) {\n this.setShowNavExtended(!this.isShowNavExtended);\n } else {\n let cornerInputTitles = this.$elements.$corner.querySelector(\".input-titles\");\n\n if (cornerInputTitles) {\n cornerInputTitles.style.display = this.isShowNavInitial ? \"none\" : \"flex\";\n }\n }\n\n this.refreshScrollUtilsVars();\n }\n /**\n * Oculta nav initial , extended y buttons\n */\n\n\n hideSidebars() {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n }\n /**\n * Muestra/Oculta Sidebar inicial\n */\n\n\n setShowNavInitial(isShowNavInitial) {\n this.isShowNavInitial = isShowNavInitial;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar extendido\n */\n\n\n setShowNavExtended(isShowNavExtended) {\n this.isShowNavExtended = isShowNavExtended;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar buttons\n */\n\n\n setShowNavButtons(isShowNavButtons) {\n this.isShowNavButtons = isShowNavButtons;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(this.config, this.isShowNavButtons, this.tabSelected);\n }\n /**\n * Muestra/oculta Sidebar Derecho\n */\n\n\n toggleSidebarRight() {\n let isHidden = !this.$capibara.classList.contains(\"extended-right\");\n this.setVisibleSidebarRight(!isHidden);\n this.refreshScrollUtilsVars();\n }\n /**\n * Modifica la opcion de mostrar y ocultar sidebar derecho\n *\n * @param {Boolean} [show = true] - indica si debe mostrarse u ocultarse\n */\n\n\n setVisibleSidebarRight(show = true) {\n let fn = show ? \"add\" : \"remove\";\n this.$capibara.classList[fn](\"extended-right\");\n }\n /**\n * Muestra/oculta Header extendido (inputs)\n */\n\n\n toggleHeader() {\n this.$capibara.classList.toggle(\"header-extended\");\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Muestra/oculta barra de carga de planilla \n * Si se llama sin parametros, por defecto muestra el loading derecho\n * que corresponde al sidebar-right\n *\n * @param {String} [position = \"right\"] - escoge loading, puede ser \"left\" | \"right\"\n * @param {Boolean} [show = true] - indica si mostrar u ocultar loading\n */\n\n\n loading(position = \"right\", show = true) {\n let fn = show ? \"remove\" : \"add\";\n let element = this.$capibara.querySelector(\".progress-bar-\" + position);\n element.classList[fn](\"hide-progress\");\n }\n\n setDisableInputsNavRight(isDisabled = true) {\n this.isDisabledInputsNavRight = isDisabled;\n this.$inputsNavRight.forEach($inputContainer => {\n let $inputs = $inputContainer.querySelectorAll(\"input\");\n $inputs.forEach($i => {\n $i.setAttribute(\"disabled\", isDisabled);\n });\n });\n let btns = this.$saveCancelBtns.querySelectorAll(\"button\");\n btns.forEach(btn => {\n btn.setAttribute(\"disabled\", isDisabled);\n });\n }\n /**\n * Busca un boton segun selector, y le agrega la clase \"loading\"\n * y deshabilita el boton\n *\n * @param { String } [ selector = '[cap-btn-calendar]' ] - selector de boton\n * @param { Boolean } [isLoading = true] - define si esta cargando o no\n */\n\n\n loadingBtn(selector = \"[cap-btn-calendar]\", isLoading = true) {\n let element = this.$capibara.querySelector(selector);\n\n if (element) {\n let fn = isLoading ? \"add\" : \"remove\";\n element.classList[fn](\"loading\");\n\n if (isLoading) {\n element.setAttribute(\"disabled\", \"\");\n } else {\n element.removeAttribute(\"disabled\");\n }\n }\n }\n /**\n * Crea Evento de guardado de los inputs del Sidebar Right\n * obtiene todos los valores de los inputs registrados en this.$inputs y \n * los retorna creando el evento \"save\"\n *\n */\n\n\n saveInputsNavRight() {\n let inputValues = [];\n let isValid = this.validateInputsNavRight();\n\n if (!isValid) {\n return;\n }\n\n this.setDisableInputsNavRight(true);\n this.$inputsNavRight.forEach($input => {\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n inputValues.push({\n key: key,\n inputConfig: inputConfig,\n el: $input,\n value: this.getInputValue($input, inputConfig)\n });\n }\n });\n this.$capibara.dispatchEvent(new CustomEvent(\"save\", {\n bubbles: true,\n cancelable: false,\n detail: {\n inputValues: inputValues,\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n validateInputsNavRight() {\n let isFormValid = true;\n this.$inputsNavRight.forEach($input => {\n let isInputValid = true;\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n let value = this.getInputValue($input, inputConfig);\n\n if (inputConfig.required) {\n if (value === \"\" || value === null || value.length == 0) {\n isFormValid = false;\n isInputValid = false;\n }\n }\n\n if (inputConfig.validation && !inputConfig.validation({\n value,\n inputConfig,\n $input\n })) {\n isFormValid = false;\n isInputValid = false;\n }\n\n if (!isInputValid) {\n $input.classList.add(\"is-invalid\");\n } else {\n $input.classList.remove(\"is-invalid\");\n }\n }\n });\n return isFormValid;\n }\n /**\n * Cancela formulario de sidebar right\n * En mobile, también desactiva el modo selección\n */\n\n\n cancelMultiInput() {\n this.$capibara.dispatchEvent(new CustomEvent(\"cancel\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n this.cleanMultiInput();\n\n if (this.isMobile && this.mobileSelectable) {\n this.mobileSelectable = false;\n this.config.timeline.mobileSelectable = false;\n this.setSelectable(false);\n this.lastFocusedDay = null;\n this.updateMobileSelectButton();\n this.updateMobileFooterButtonsVisibility();\n }\n }\n /**\n * Limpia el formulario en el sidebar right\n * oculta el sidebar right\n */\n\n\n cleanMultiInput() {\n this.$capibara.classList.remove(\"extended-right\");\n this.selected = [];\n this.redrawSelection();\n }\n /**\n * Obtiene el valor de un input\n *\n * @param {Object} elem - elemento del dom que representa al input, no necesariamente input\n * @param {Object} config - configuracion de input\n * @return {*} valor del Input\n */\n\n\n getInputValue(elem, inputConfig) {\n let value = null;\n let inputElement = null;\n let inputsElement = null;\n\n switch (inputConfig.type) {\n case 'custom':\n value = inputConfig.getValue ? inputConfig.getValue({\n elem,\n props: inputConfig\n }) : null;\n break;\n\n case 'time':\n let hhElement = elem.querySelector(\".hour\");\n let mmElement = elem.querySelector(\".minutes\");\n let hhValue = hhElement.value;\n let mmValue = mmElement.value;\n\n if (hhValue) {\n hhValue = parseFloat(hhValue);\n }\n\n if (mmValue) {\n mmValue = parseFloat(mmValue);\n }\n\n value = {\n hh: hhValue,\n mm: mmValue\n };\n break;\n\n case 'message':\n case 'textarea':\n inputElement = elem.querySelector(\"textarea\");\n value = inputElement.value || '';\n break;\n\n case \"inputList\":\n let valuesInputs = [];\n inputsElement = elem.querySelectorAll(\"input[type='number']\");\n inputsElement.forEach(inputElement => {\n let valueInput = inputElement.value;\n\n if (valueInput) {\n valueInput = parseFloat(valueInput);\n }\n\n let label = inputElement.getAttribute(\"input-label\");\n let id = inputElement.getAttribute(\"input-id\");\n valuesInputs.push({\n label: label,\n value: valueInput,\n id: id\n });\n });\n value = valuesInputs;\n break;\n\n case 'number':\n case 'float':\n inputElement = elem.querySelector(\"input[type='number']\");\n value = inputElement.value;\n\n if (value) {\n value = parseFloat(value);\n }\n\n break;\n\n case 'checkbox':\n inputElement = elem.querySelector(\"input[type='checkbox']\");\n value = inputElement.checked;\n break;\n\n case 'select':\n inputElement = elem.querySelector(\"select.input-select\");\n let inputValue = inputElement.value;\n value = inputConfig.options.find(o => o.id == inputValue);\n break;\n\n case 'file':\n inputElement = elem.querySelector(\"input[type='file']\");\n value = inputElement.files;\n break;\n\n case 'input-box':\n inputsElement = elem.querySelectorAll(\".mini-input-section input\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.value;\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"input-id\"),\n key: i.getAttribute(\"input-key\"),\n value: v\n });\n });\n break;\n\n case 'data-list':\n inputsElement = elem.querySelectorAll(\".mini-input-section\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.getAttribute(\"data-value\");\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"data-id\"),\n key: i.getAttribute(\"data-key\"),\n value: v || null\n });\n });\n break;\n\n case 'title':\n //no es realmente un input, es solo un texto\n //no es necesario obtener valores de aqui\n break;\n\n case 'text':\n default:\n inputElement = elem.querySelector(\"input\");\n\n if (inputElement) {\n value = inputElement.value;\n }\n\n }\n\n return value;\n }\n /**\n * Funcion llamada al pasar sobre un item del sidebar izquierdo, \n * para mostrar un detalle del item\n * \n * El detalle del item se ancla de manera superior o inferior dependiendo de \n * la posicion el mouse en pantalla, para no salir del campo visual \n *\n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n overNavItem(evt) {\n let pos = evt.detail.pos;\n let item = evt.detail.item; //let dataDay = evt.detail.data;\n\n let $detail = this.$elements.$navLeft.querySelector(\".detail-nav-item\");\n\n if ($detail.classList.contains(\"hide\")) {\n $detail.classList.remove(\"hide\");\n }\n\n ;\n $detail.innerHTML = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDetailNavItemContent(item);\n\n if (pos.yPercent > 50) {\n //mayor a 50%\n if (!$detail.classList.contains(\"to-bottom\")) {\n $detail.classList.add(\"to-bottom\");\n }\n } else {\n if ($detail.classList.contains(\"to-bottom\")) {\n $detail.classList.remove(\"to-bottom\");\n }\n }\n\n $detail.style.top = pos.top + \"px\";\n }\n /**\n * Oculta detalle de item en sidebar izquierdo \n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n leaveNavItem() {\n this.$elements.$navLeft.querySelector(\".detail-nav-item\").classList.add(\"hide\");\n }\n /**\n * Captura evento mousemove de floatBoxContainer\n * para refrescar la posicion y detener posteriores eventos\n *\n * @param {Object} evt - Evento de mousemove\n */\n\n\n mouseMoveOnFlexBoxContainer(evt) {\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition(position);\n evt.preventDefault();\n }\n /**\n * Captura evento mouseleave de floatBoxContainer\n * para ocultar detailDay\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseLeaveOnFloatBoxContainer(evt) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n /**\n * Maneja el clic fuera del div específico\n * @param {Event} event - El evento de clic\n */\n\n\n handleClickOutside(event) {\n if (!this.isMobile && this.$elements && this.$elements.$detailDay && !this.$elements.$detailDay.contains(event.target)) {\n this.hideDetailDay();\n }\n }\n /**\n * Captura el evento mousemove en $table, para indicar la posicion de $dayMouseOver\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseMoveOnTable(evt) {\n if (this.isVisibleContextMenu) return;\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n\n if (this.lastMousePosition == null || this.lastMousePosition.left != pos.left || this.lastMousePosition.top != pos.top) {\n this.$elements.$dayMouseOver.style.transform = \"translate(\" + pos.left + \"px ,\" + pos.top + \"px)\";\n evt.preventDefault();\n this.lastMousePosition = pos;\n }\n }\n\n rightClickOnCapibara(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n }\n\n rightClickOnTable(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n this.showContextMenuOnTable(evt);\n evt.preventDefault();\n }\n }\n\n showContextMenuOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table);\n\n if (this.isVisibleContextMenu) {\n this.hideContextMenu();\n return;\n } //let position = utils.eventToPosition(this.config, evt, this.$elements.$table);\n\n\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n $capibaraElem: this.$capibara,\n config: this.config,\n evt,\n //position,\n date,\n item,\n selected: this.selected,\n name: \"onTable\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n\n if (isVisible) {\n evt.preventDefault();\n }\n }\n /**\n * Captura el evento click en $table, para seleccionar dias\n * los dias seleccionados se registran en this.selected[]\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n clickOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table); //if(item == null) return; // cuano se selecciona un espacio no seleccionable\n //si es mobile y selección deshabilitada, solo muestra detalles (no selecciona)\n\n let dataByDate = _.find(item.data, {\n date\n });\n\n if (this.isMobile && !this.mobileSelectable && dataByDate) {\n // siempre actualizar detail-day (con o sin datos) para que muestre el día seleccionado\n let newDDContentString = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawDetailDay(this.config, item, dataByDate, this.tabSelected);\n\n if (newDDContentString) {\n this.$elements.$detailDay.innerHTML = newDDContentString;\n }\n\n this.lastDataDay = dataByDate;\n this.lastFocusedDay = item ? {\n date,\n item,\n pos\n } : null;\n this.focusOnFloatBox({\n pos,\n evt\n });\n return;\n }\n\n if (this.isMobile && !this.mobileSelectable && item) {\n this.lastFocusedDay = {\n date,\n item,\n pos\n };\n }\n\n if (!this.isSelectable({\n item,\n date,\n dataByDate\n })) {\n this.$capibara.dispatchEvent(new CustomEvent(\"selectNoSelectable\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected,\n lastSelection: {\n date,\n item,\n pos\n }\n }\n }));\n return; // cuando se selecciona un espacio no seleccionable\n }\n\n let eventName = \"deselectDay\";\n\n if (this.toggleSelect(date, item, pos)) {\n eventName = \"selectDay\";\n }\n\n this.$capibara.dispatchEvent(new CustomEvent(eventName, {\n bubbles: true,\n cancelable: false,\n detail: {\n config: this.config,\n lastSelection: {\n date,\n item,\n pos\n },\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n toggleSelect(date, item, pos) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item);\n return false;\n } else {\n this.select(date, item, pos);\n return true;\n }\n }\n\n isSelected(date, item) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n return index > -1;\n }\n\n isSelectable({\n item,\n date,\n dataByDate\n }) {\n if (!this.config.timeline.selectable) {\n return false;\n }\n\n if (item.selectable === false) {\n return false;\n }\n\n if (this.config.timeline.noFutureSelectable) {\n let d = new Date(date);\n let today = new Date();\n\n if (d > today) {\n return false;\n }\n }\n\n let itemIsSelectable = true;\n\n if (this.tabSelected && this.tabSelected.selectableIfHas) {\n if (!item.values[this.tabSelected.selectableIfHas]) {\n itemIsSelectable = false;\n }\n }\n\n return itemIsSelectable;\n }\n\n redrawSelection() {\n this.checkClassSidebarExtendedRight();\n this.updateMobileFooterVisibility();\n this.updateMobileFooterButtonsVisibility();\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawSelectBoard(this.$elements.$selectContainer, this.selected);\n }\n\n deselect(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n this.selected.splice(index, 1);\n }\n\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n select(date, item, pos, redraw = true, refreshForm = true) {\n if (!this.isSelected(date, item)) {\n this.selected.push({\n index: 0,\n date,\n item,\n pos\n });\n let dataDay = null;\n\n if (item.data) {\n dataDay = item.data.find(d => {\n return d.date == date;\n });\n } // si es el primer item seleccionado, se autorrellena el formulario de navRight (no en mobile con selección)\n\n\n if (this.selected.length == 1 && refreshForm && !(this.isMobile && this.mobileSelectable)) {\n this.redraw({\n cornerRight: true\n });\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected, dataDay, this.selected[0]);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n }\n\n let focused = false;\n\n if (!(this.isMobile && this.mobileSelectable)) {\n this.$inputsNavRight.forEach(inputNavRight => {\n if (!focused) {\n let validInputs = inputNavRight.querySelectorAll(\"input\");\n\n if (validInputs && validInputs.length > 0) {\n let firstValidInput = _.first(validInputs);\n\n window.setTimeout(function () {\n firstValidInput.focus();\n }, 0);\n focused = true;\n }\n }\n });\n }\n\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n setIndexToSelected() {\n this.selected.forEach((s, index) => {\n s.index = index + 1;\n });\n }\n\n isSelectedAllDate(date) {\n let isAllSelected = true;\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n if (!this.isSelected(date, item)) {\n isAllSelected = false;\n }\n });\n });\n return isAllSelected;\n }\n\n selectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.selectByItemDate(date, item, false);\n });\n });\n }\n\n deselectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.deselectByItemDate(date, item, false);\n });\n });\n }\n\n selectByItemDate(date, item, redraw = true, refreshForm = true) {\n if (!this.isSelected(date, item)) {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItemDate(this.config, item, date);\n this.select(date, item, pos, redraw, refreshForm);\n }\n }\n\n deselectByItemDate(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item, redraw);\n }\n }\n\n deselectAll(redraw = false) {\n this.selected = [];\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n checkClassSidebarExtendedRight() {\n const showSidebar = this.selected.length > 0 && !(this.isMobile && this.mobileSelectable);\n\n if (showSidebar) {\n this.$capibara.classList.add(\"extended-right\");\n } else {\n this.$capibara.classList.remove(\"extended-right\");\n }\n }\n\n updateMobileFooterVisibility() {\n const $footer = this.$elements.$mobileFooter;\n if (!$footer) return;\n const showFooter = this.isMobile && this.config.timeline.selectableDesktop !== false;\n if (showFooter) this.$capibara.classList.add(\"has-mobile-footer\");else this.$capibara.classList.remove(\"has-mobile-footer\");\n }\n\n handleMobileFooterClick(evt) {\n if (evt.target.closest(\".mobile-footer-cancel\")) {\n this.cancelMultiInput();\n return;\n }\n\n const $btn = evt.target.closest(\".mobile-footer-btn[data-mobile-btn-idx]\");\n\n if ($btn && !$btn.disabled) {\n const index = parseInt($btn.getAttribute(\"data-mobile-btn-idx\"), 10);\n const buttons = this.config.timeline.mobileFooter && this.config.timeline.mobileFooter.buttons || [];\n const btnConfig = buttons[index];\n\n if (btnConfig && typeof btnConfig.onClick === \"function\") {\n btnConfig.onClick({\n evt,\n selected: this.selected\n });\n }\n }\n }\n /**\n * oculta detailDay en el dom, usando la clase dd-hide\n */\n\n\n hideDetailDay() {\n this.$elements.$detailDay.classList.add(\"dd-hide\");\n }\n\n hideContextMenu() {\n if (this.$elements.$contextMenu) {\n this.$elements.$contextMenu.classList.add(\"cm-hide\");\n }\n\n this.isVisibleContextMenu = false;\n }\n\n refreshScrollUtilsVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft = this.$elements.$container.scrollLeft;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop = this.$elements.$container.scrollTop;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollWidth = this.$elements.$container.scrollWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollHeight = this.$elements.$container.scrollHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientTable = this.$elements.$table.getBoundingClientRect();\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientContainer = this.$elements.$container.getBoundingClientRect();\n }\n\n refreshVirtualScrollVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth = this.$elements.$container.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight = this.$elements.$container.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth = this.$elements.$navLeft.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight = this.$elements.$header.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n }\n\n refreshVirtualScroll() {\n let $floatBoxList = this.$elements.$floatBoxContainer.querySelectorAll(\".float-box\");\n $floatBoxList.forEach(f => {\n if (this.isVisibleFloatBoxElement(f)) {\n f.setAttribute(\"data-is-visible\", true);\n } else {\n f.setAttribute(\"data-is-visible\", false);\n }\n });\n }\n\n isVisibleFloatBoxElement(f) {\n let containerWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth;\n let containerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight;\n let navWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth;\n let headerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight;\n let dayWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth;\n let itemHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight;\n let scrollLeft = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft;\n let scrollTop = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop;\n let margin = dayWidth;\n let left = parseFloat(f.style.left);\n let top = parseFloat(f.style.top);\n let visibleWidth = containerWidth - navWidth;\n let visibleHeight = containerHeight - headerHeight;\n let isVisibleLeft = left > scrollLeft - dayWidth - margin;\n let isVisibleRight = left < scrollLeft + visibleWidth + dayWidth + margin;\n let isVisibleTop = top > scrollTop - itemHeight - margin;\n let isVisibleBottom = top < scrollTop + visibleHeight + itemHeight + margin;\n return isVisibleLeft && isVisibleRight && isVisibleTop && isVisibleBottom;\n }\n\n onScrollContainer() {\n if (!this.refreshVirtualScrollDebounced) {\n this.refreshVirtualScrollDebounced = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].throttle(this.refreshVirtualScroll.bind(this), 100, {\n leading: true,\n trailing: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollDebounced();\n this.hideContextMenu();\n }\n /**\n * Muestra Detail dialog y Refresca su posicion \n * usando el evento del mouse\n *\n * @param {Object} evt - evento de mousemove, para posiciones en pantalla\n */\n\n\n refreshDetailDayPosition(position) {\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n this.$elements.$detailDay.style.top = position.top + \"px\";\n this.$elements.$detailDay.style.left = position.left + dayWidth + \"px\";\n let yPositionClass = \"has-top-arrow\";\n let xPositionClass = \"\"; //condicion para primeras 3 filas\n\n if (position.topClient <= itemHeight * 3) {\n yPositionClass = \"has-ceil-arrow\";\n } else if (position.yPercent > 20 && position.yPercent <= 70) {\n //entre 20 y 50 %\n yPositionClass = \"has-middle-arrow\";\n } else if (position.yPercent > 70) {\n yPositionClass = \"has-bottom-arrow\";\n }\n\n if (position.xPercent > 30) {\n xPositionClass = \"has-right-arrow\";\n } //quita dd-hide, sobreescribiendo todas las clases\n\n\n this.$elements.$detailDay.className = \"detail-day \" + yPositionClass + \" \" + xPositionClass;\n }\n /**\n * Captura evento click en boton para abrir arbol, en sidebar izquierdo\n *\n * @param {Object} evt - objeto evento click\n */\n\n\n clickNavLeftTreeIcon() {\n this.redraw({\n floatBox: true\n });\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n\n clickFloatBox(evt) {\n if (this.isMobile) {\n this.mouseOverFloatBox(evt, false);\n }\n }\n /**\n * Captura evento mouseover sobre elemento floatBox\n * usada para mostrar detalle de dia/item del floatbox\n */\n\n\n mouseOverFloatBox(evt, force) {\n let item = evt.detail.item;\n let dataDay = evt.detail.data; //verifica que sean dias distintos, comparandolo con el anterior,\n // para no crear nuevamente el mismo detail-day, con los mismos datos\n\n if (dataDay !== this.lastDataDay || force) {\n let newDDContentString = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawDetailDay(this.config, item, dataDay, this.tabSelected);\n\n if (newDDContentString) {\n this.$elements.$detailDay.innerHTML = newDDContentString;\n }\n\n this.lastDataDay = dataDay;\n }\n }\n\n clickDateHeader(evt) {\n let date = evt.detail.date;\n this.toggleSelectByDate(date);\n this.redrawSelection();\n }\n\n toggleSelectByDate(date) {\n if (this.isSelectedAllDate(date)) {\n this.deselectByDate(date);\n } else {\n this.selectByDate(date);\n }\n\n this.selected = this.selected.sort((s, n) => {\n return new Date(s.date) - new Date(n.date);\n });\n this.setIndexToSelected();\n }\n\n contextMenuDateHeader(evt) {\n let left = evt.detail.clientX;\n let top = evt.detail.clientY - this.$capibara.getBoundingClientRect().top;\n let date = evt.detail.date;\n const target = evt.detail.$elem;\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n target,\n $capibaraElem: this.$capibara,\n config: this.config,\n selected: this.selected,\n date,\n left,\n top,\n name: \"onDateHeader\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n }\n /**\n * Captura evento window resize\n * para verificar si es mobile o no\n */\n\n\n onWindowResize() {\n if (this.initialized) {\n let oldValue = this.isMobile;\n let newValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile(this.config);\n\n if (oldValue != newValue) {\n this.isMobile = newValue;\n this.toggleSidebarMobile();\n this.updateMobileFooterVisibility();\n this.setAllCSSVariables();\n this.redraw({\n floatBox: true,\n navLeft: true,\n header: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n }\n /**\n * Cambia sidebar para mobile, segun variable this.isMobile\n */\n\n\n toggleSidebarMobile() {\n if (this.isMobile) {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n this.setEditable(false);\n this.setSelectable(this.mobileSelectable);\n } else {\n this.setShowNavInitial(true);\n this.setShowNavExtended(false);\n this.setShowNavButtons(true);\n this.setEditable(true);\n this.setSelectable(this.config.timeline.selectableDesktop !== false);\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n\n setEditable(newEditable) {\n if (this.config.timeline.editable != newEditable) {\n this.config.timeline.editable = newEditable;\n this.redraw({\n navLeft: true,\n header: true\n });\n }\n }\n\n setSelectable(newSelectable) {\n if (this.config.timeline.selectable != newSelectable) {\n this.config.timeline.selectable = newSelectable;\n this.cleanMultiInput();\n }\n }\n\n toggleMobileSelect() {\n this.mobileSelectable = !this.mobileSelectable;\n this.config.timeline.mobileSelectable = this.mobileSelectable;\n\n if (this.isMobile) {\n this.setSelectable(this.mobileSelectable);\n }\n\n if (this.mobileSelectable && this.lastFocusedDay) {\n const {\n date,\n item,\n pos\n } = this.lastFocusedDay;\n const dataByDate = item && item.data ? _.find(item.data, {\n date\n }) : null;\n\n if (this.isSelectable({\n item,\n date,\n dataByDate\n })) {\n this.toggleSelect(date, item, pos);\n this.redrawSelection();\n this.updateMobileFooterButtonsVisibility();\n this.$capibara.dispatchEvent(new CustomEvent(\"selectDay\", {\n bubbles: true,\n cancelable: false,\n detail: {\n config: this.config,\n lastSelection: {\n date,\n item,\n pos\n },\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n this.lastFocusedDay = null;\n } else if (!this.mobileSelectable) {\n this.lastFocusedDay = null;\n }\n\n this.updateMobileSelectButton();\n this.checkClassSidebarExtendedRight();\n this.updateMobileFooterVisibility();\n this.$capibara.dispatchEvent(new CustomEvent(\"mobileSelectToggled\", {\n bubbles: true,\n cancelable: false,\n detail: {\n mobileSelectable: this.mobileSelectable\n }\n }));\n }\n\n updateMobileSelectButton() {\n let $btn = this.$capibara && this.$capibara.querySelector(\"[toggle-mobile-select]\");\n if (!$btn) return;\n const active = this.mobileSelectable;\n const label = active ? \"Desactivar selección\" : \"Activar selección de días\";\n const labelStyle = active ? \"display:none\" : \"\";\n const countStyle = active ? \"\" : \"display:none\";\n $btn.innerHTML = this.getCheckboxIconHtml(active) + '<span class=\"mobile-footer-select-label\" style=\"' + labelStyle + '\">Seleccionar días</span>' + '<span class=\"mobile-footer-select-count\" style=\"' + countStyle + '\"></span>';\n $btn.classList.toggle(\"active\", active);\n $btn.setAttribute(\"aria-checked\", active);\n $btn.setAttribute(\"aria-label\", label);\n $btn.setAttribute(\"cap-tooltip\", label);\n this.updateMobileFooterButtonsVisibility();\n }\n\n updateMobileFooterButtonsVisibility() {\n const $footer = this.$elements.$mobileFooter;\n if (!$footer) return;\n const selectMode = this.mobileSelectable;\n const hasSelected = this.selected.length > 0;\n const $count = $footer.querySelector(\".mobile-footer-select-count\");\n if ($count) $count.textContent = this.selected.length + \" días\";\n $footer.querySelectorAll(\"[data-show-when]\").forEach($el => {\n const showWhen = $el.getAttribute(\"data-show-when\");\n let visible = showWhen === \"always\" || showWhen === \"select\" && selectMode || showWhen === \"detail\" && !selectMode;\n\n if ($el.classList.contains(\"mobile-footer-cancel\")) {\n visible = visible && hasSelected;\n }\n\n $el.classList.toggle(\"mobile-footer-btn-hidden\", !visible);\n const disabledWhenNoSelection = $el.getAttribute(\"data-disabled-when-no-selection\") === \"true\";\n const disabled = disabledWhenNoSelection && selectMode && !hasSelected;\n $el.disabled = disabled;\n });\n }\n\n getCheckboxIconHtml(checked) {\n if (_util_icons__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getCheckboxIcon) return _util_icons__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getCheckboxIcon(checked);\n const path = checked ? \"M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" : \"M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,5V19H5V5H19Z\";\n return '<span class=\"checkbox-icon\"><svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"' + path + '\"/></svg></span>';\n }\n\n focusOnFloatBox({\n pos,\n evt\n }) {\n if (this.isMobile) {\n let containerWidth = this.$elements.$container.clientWidth;\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let navWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--nav-width\"));\n let left = pos.left - containerWidth + 1.5 * dayWidth + navWidth; //let containerHeight = this.$elements.$container.clientHeight;\n\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\")); //let headerHeight = parseFloat(utils.getCSSVariable(this.config, \"--header-height\"));\n\n let top = pos.top - 0.5 * itemHeight;\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition({ ...position,\n topClient: position.yInnerPercent >= 70 ? position.topClient : 0,\n // fuerza posicion de arrow en detailday\n xPercent: position.x < 4 ? 0 : 100 // fuerza arrow right\n\n });\n this.$elements.$container.scroll({\n top,\n left,\n behavior: 'smooth'\n });\n }\n }\n\n refreshInputsWithReload({\n detail\n }) {\n if (this.isMobile && this.mobileSelectable) return;\n this.$inputsWithReload = this.$inputsWithReload.map(({\n $input,\n config\n }) => {\n let lastSelection = detail && detail.lastSelection ? detail.lastSelection : null;\n let newInput = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createInput(config, null, lastSelection, detail.selected);\n $input.parentElement.replaceChild(newInput, $input);\n let index = this.$inputsNavRight.indexOf($input);\n\n if (index >= 0) {\n this.$inputsNavRight[index] = newInput;\n }\n\n return {\n $input: newInput,\n config\n };\n });\n }\n /**\n * Agrega eventos a los elementos del dom de la planilla\n * usando el objecto $capibara\n */\n\n\n addEvents() {\n this.$capibara.addEventListener(\"click\", this.hideContextMenu.bind(this));\n this.$capibara.addEventListener(\"contextmenu\", this.rightClickOnCapibara.bind(this));\n this.$capibara.addEventListener(\"toggleDark\", this.toggleDark.bind(this));\n this.$capibara.addEventListener(\"toggleHeader\", this.toggleHeader.bind(this));\n this.$capibara.addEventListener(\"toggleMobileSelect\", this.toggleMobileSelect.bind(this));\n this.$capibara.addEventListener(\"toggleSidebar\", this.toggleSidebar.bind(this));\n this.$capibara.addEventListener(\"toggleSidebarRight\", this.toggleSidebarRight.bind(this));\n this.$capibara.addEventListener(\"saveMultiInput\", this.saveInputsNavRight.bind(this));\n this.$capibara.addEventListener(\"cancelMultiInput\", this.cancelMultiInput.bind(this));\n this.$capibara.addEventListener(\"overNavItem\", this.overNavItem.bind(this));\n this.$capibara.addEventListener(\"leaveNavItem\", this.leaveNavItem.bind(this));\n this.$capibara.addEventListener(\"clickNavLeftTreeIcon\", this.clickNavLeftTreeIcon.bind(this));\n this.$capibara.addEventListener(\"mouseOverFloatBox\", this.mouseOverFloatBox.bind(this));\n this.$capibara.addEventListener(\"clickFloatBox\", this.clickFloatBox.bind(this));\n this.$capibara.addEventListener(\"selectTabHeader\", e => {\n this.selectTab(e.detail.tab);\n });\n this.$capibara.addEventListener(\"selectLegendHeader\", this.selectLegend.bind(this));\n this.$capibara.addEventListener(\"selectDay\", this.refreshInputsWithReload.bind(this));\n this.$capibara.addEventListener(\"deselectDay\", this.refreshInputsWithReload.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mousemove\", this.mouseMoveOnFlexBoxContainer.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mouseleave\", this.mouseLeaveOnFloatBoxContainer.bind(this));\n this.$elements.$table.addEventListener(\"mousemove\", this.mouseMoveOnTable.bind(this));\n this.$elements.$table.addEventListener(\"click\", this.clickOnTable.bind(this));\n this.$elements.$table.addEventListener(\"contextmenu\", this.rightClickOnTable.bind(this));\n this.$elements.$container.addEventListener(\"scroll\", this.onScrollContainer.bind(this));\n\n if (this.$elements.$mobileFooter) {\n this.$elements.$mobileFooter.addEventListener(\"click\", this.handleMobileFooterClick.bind(this));\n }\n\n this.$elements.$container.addEventListener(\"clickDate\", this.clickDateHeader.bind(this));\n this.$elements.$container.addEventListener(\"contextMenuDate\", this.contextMenuDateHeader.bind(this));\n window.addEventListener('resize', this.onWindowResize.bind(this));\n document.addEventListener(\"click\", this.handleClickOutside.bind(this));\n }\n /**\n * Funcion para redibujar partes de la planilla, indicado segun parametro\n *\n * options : {\n * floatBox: Boolean,\n * plots: Boolean,\n * header: Boolean,\n * navLeft: Boolean,\n * navRight: Boolean,\n * }\n *\n *\n * @param {Object} options - objecto de configuracion\n */\n\n\n redraw(options) {\n if (options.floatBox) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawFloatBox(this.config, this.tabSelected, this.$elements.$floatBoxContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawBackground(this.config, this.$elements.$background);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawTodayLine(this.config, this.$elements.$todayLine);\n }\n\n if (options.plots) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n }\n\n if (options.header) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeader(this.config, this.$elements.$header);\n\n if (this.config.timeline.header.extend.enabled !== false) {\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(this.config);\n\n if ($headerExtended) {\n this.$elements.$header.append($headerExtended);\n }\n }\n }\n\n if (options.headerTop) {\n this.$elements.$headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeaderTop(this.config, this.tabSelected, this.$elements.$headerTop);\n }\n\n if (options.detailDay) {\n this.hideDetailDay();\n this.lastDataDay = null;\n this.lastFocusedDay = null;\n }\n\n if (options.navLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavLeft(this.$elements.$navLeft, this.config, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(this.config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n\n if (options.cornerLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCorner(this.$elements.$corner, this.config, this.tabSelected);\n }\n\n if (options.cornerRight) {\n this.$elements.$cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCornerRight(this.$elements.$cornerRight, this.config, this.tabSelected);\n }\n\n if (options.navRight) {\n let dataDay = null;\n let daySelected = null;\n\n if (this.selected.length > 0) {\n daySelected = this.selected[0];\n\n if (daySelected.item.data) {\n dataDay = daySelected.item.data.find(d => {\n return d.date == daySelected.date;\n });\n }\n }\n\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected, dataDay, this.selected[0]);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToStart() {\n this.$elements.$container.scrollLeft = 0;\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToEnd() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth;\n }\n /**\n * Mueve el Scroll de la planilla a la tercera parte\n * TODO mejorar logica de esta funcion\n */\n\n\n scrollToMiddle() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth / 3;\n }\n /**\n * Fija las variables de CSs segun Config\n */\n\n\n setAllCSSVariables() {\n let config = this.config; //styleUtils.cleanStyle(config);\n\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setHeaderStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(config, this.isShowNavExtended, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(config, this.isShowNavButtons, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setTableStyle(config);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NhcGliYXJhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvbGliL2NhcGliYXJhLmpzPzBmMGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSAgICAgICAgICAgZnJvbSAnLi4vdXRpbC9kb21VdGlscyc7XG5pbXBvcnQgdXRpbHMgICAgICAgICBmcm9tICcuLi91dGlsL3V0aWxzJztcbi8vaW1wb3J0IGRhdGVVdGlscyAgICAgZnJvbSAnLi4vdXRpbC9kYXRlVXRpbHMnO1xuaW1wb3J0IHRhYmxlRWxlbWVudHMgZnJvbSAnLi4vdXRpbC90YWJsZUVsZW1lbnRzJztcbmltcG9ydCBzdHlsZVV0aWxzICAgIGZyb20gJy4uL3V0aWwvc3R5bGVVdGlscyc7XG5pbXBvcnQgaWNvbnMgICAgICAgICBmcm9tICcuLi91dGlsL2ljb25zJztcblxuLyoqXG4gKiBDYXBpYmFyYSwgcGxhbmlsbGEgcGFyYSBkZXNwbGllZ3VlIGRlIGRhdG9zIHBvciBmZWNoYSBjb21vIEdBTlRUXG4gKiBvcmllbnRhZG8gaW5pY2lhbG1lbnRlIGEgZGF0b3MgZGlhcmlvcyBkZSBpdGVtc1xuICpcbiAqIEBhdXRob3IgUGF0cmljaW8uIE0uIFJvamFzLiA8cGF0cmljaW9AaXJyaWNyb3BzLmNvbT5cbiAqL1xuZXhwb3J0IGNsYXNzIENhcGliYXJhe1xuXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBJbnN0YW5jaWEgdmFyaWFibGVzIGRlIHBsYW5pbGxhIENhcGliYXJhLCBjb24gY29uZmlndXJhY2lvblxuICAgKiBDcmVhIGVsIGVsZW1lbnRvIGNvbnRlbmVkb3Ige2NvbnRhaW5lckVsZW1lbnR9IHNlZ3VuIHNlbGVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzIC0gYXRyaWJ1dG9zIHF1ZSBzZSB1c2FyYW4gYWwgaW5pY2lhciBsYSBwbGFuaWxsYVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcy5jb25maWcgLSBDb25maWd1cmFjaW9uIGRlIHBsYW5pbGxhXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlnfSl7XG4gICAgaWYoY29uZmlnID09IG51bGwpIGNvbnNvbGUuZXJyb3IoXCJjb25maWcgbm8gZWNvbnRyYWRvXCIpO1xuXG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihjb25maWcuc2VsZWN0b3IpO1xuXG4gICAgaWYodGhpcy5jb250YWluZXJFbGVtZW50ID09IG51bGwpIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50byBkb20gc2VndW4gY29uZmlnLnNlbGVjdG9yLCBubyBlbmNvbnRyYWRvXCIpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplZCAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICB0aGlzLiRjYXBpYmFyYSAgICAgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kZWxlbWVudHMgICAgICAgICAgICAgICAgPSB7fTtcbiAgICB0aGlzLnRhYlNlbGVjdGVkICAgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQgICAgICAgICAgPSBbXTtcbiAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkICAgICAgICA9IFtdO1xuICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zICAgICAgICAgID0gW107XG4gICAgdGhpcy5zZWxlY3RlZCAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICB0aGlzLmNvbmZpZyAgICAgICAgICAgICAgICAgICA9IGNvbmZpZztcbiAgICB0aGlzLmxhc3REYXRhRGF5ICAgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy5sYXN0Rm9jdXNlZERheSAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQgICAgICAgID0gZmFsc2U7XG4gICAgdGhpcy5pc1Nob3dOYXZJbml0aWFsICAgICAgICAgPSB0cnVlO1xuICAgIHRoaXMuaXNTaG93TmF2QnV0dG9ucyAgICAgICAgID0gdHJ1ZTtcbiAgICB0aGlzLmlzTW9iaWxlICAgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgIHRoaXMubGFzdE1vdXNlUG9zaXRpb24gICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ICAgICA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNhYmxlZElucHV0c05hdlJpZ2h0ID0gZmFsc2U7XG4gICAgdGhpcy5tb2JpbGVTZWxlY3RhYmxlICAgICAgICA9IGNvbmZpZy50aW1lbGluZS5tb2JpbGVTZWxlY3RhYmxlID09PSB0cnVlO1xuXG4gIH1cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgUGxhbmlsbGE6XG4gICAqICAtIHZhY2lhIHZhcmlhYmxlcyBuZWNlc2FyaWFzXG4gICAqICAtIGNyZWEgcGxhbmlsbGEgbGxhbWFuZG8gYSBkcmF3VGFibGVcbiAgICogIC0gQWdyZWdhIGV2ZW50b3MgYSBwbGFuaWxsYVxuICAgKiAgLSBtdWV2ZSBzY3JvbGwgYWwgbWVkaW8gZGUgbGEgdGFibGFcbiAgICovXG4gIGluaXQoKXtcblxuICAgIHRoaXMudGFiU2VsZWN0ZWQgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuJGNhcGliYXJhICAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuJGVsZW1lbnRzICAgICAgICAgICAgPSB7fTtcbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodCAgICAgID0gW107XG4gICAgdGhpcy4kaW5wdXRzV2l0aFJlbG9hZCAgICA9IFtdO1xuICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zICAgICAgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkICAgICAgICAgICAgID0gW107XG4gICAgdGhpcy5sYXN0RGF0YURheSAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy5sYXN0Rm9jdXNlZERheSAgICAgICA9IG51bGw7XG4gICAgdGhpcy5pc01vYmlsZSAgICAgICAgICAgICA9IHV0aWxzLmNoZWNrSXNNb2JpbGUodGhpcy5jb25maWcpO1xuICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICB0aGlzLm1vYmlsZVNlbGVjdGFibGUgICAgID0gdGhpcy5jb25maWcudGltZWxpbmUubW9iaWxlU2VsZWN0YWJsZSA9PT0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0QWxsQ1NTVmFyaWFibGVzKCk7XG4gICAgdGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZURlc2t0b3AgPSB0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlRGVza3RvcCAhPSBudWxsID8gdGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZURlc2t0b3AgOiB0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlO1xuICAgIHRoaXMuZHJhd1RhYmxlKCk7XG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbiAgICB0aGlzLnNjcm9sbFRvTWlkZGxlKCk7XG4gICAgdGhpcy50b2dnbGVTaWRlYmFyTW9iaWxlKCk7XG4gICAgdGhpcy51cGRhdGVNb2JpbGVGb290ZXJWaXNpYmlsaXR5KCk7XG4gICAgdGhpcy51cGRhdGVNb2JpbGVGb290ZXJCdXR0b25zVmlzaWJpbGl0eSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBDYW1iaWEgY29uZmlndXJhY2lvbiBkZSBwbGFuaWxsYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBudWV2YSBwYXJhIHBsYW5pbGxhXG4gICAqL1xuICBzZXRDb25maWcoY29uZmlnKXtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWEgbGEgcGxhbmlsbGFcbiAgICogYWdyZWdhbmRvIHRvZG9zIGxvcyBlbGVtZW50b3MgZW4gb3JkZW4gZGVudHJvXG4gICAqXG4gICAqIEByZXR1cm4geyBEb21FbGVtZW50IH0gJGNhcGliYXJhIC0gZWxlbWVudG8gZGVsIERvbSBxdWUgY29udGllbmUgdG9kYSBsYSBwbGFuaWxsYVxuICAgKi9cbiAgZHJhd1RhYmxlKCl7XG5cbiAgICBsZXQgY29uZmlnICAgICAgICA9IHRoaXMuY29uZmlnXG4gICAgbGV0IGluaXRpYWxUYWIgICAgPSBjb25maWcudGltZWxpbmUudGFic1swXTtcbiAgICBsZXQgZmlyc3RDaGlsZHJlbiA9IHt9O1xuXG4gICAgaWYoY29uZmlnLmRhdGEgICYmIGNvbmZpZy5kYXRhLmxlbmd0aCA+IDAgJiYgY29uZmlnLmRhdGFbMF0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICBmaXJzdENoaWxkcmVuID0gY29uZmlnLmRhdGFbMF0uY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgbGV0ICRjYXBpYmFyYSAgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQWdUYWJsZShjb25maWcpO1xuICAgIGxldCAkY29ybmVyICAgICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUNvcm5lcihjb25maWcsIGluaXRpYWxUYWIpO1xuICAgIGxldCAkY29ybmVyUmlnaHQgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUNvcm5lclJpZ2h0KGNvbmZpZyk7XG4gICAgbGV0ICRoZWFkZXJUb3AgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlSGVhZGVyVG9wKGNvbmZpZyk7XG4gICAgbGV0ICRoZWFkZXIgICAgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlSGVhZGVyKGNvbmZpZyk7XG4gICAgbGV0ICR0b2RheUxpbmUgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlVG9kYXlMaW5lKGNvbmZpZyk7XG4gICAgbGV0ICRoZWFkZXJFeHRlbmRlZCAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlSGVhZGVyRXh0ZW5kZWQoY29uZmlnKTtcbiAgICBsZXQgJG5hdkxlZnQgICAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVOYXZMZWZ0KGNvbmZpZylcbiAgICBsZXQgJGNvcm5lckZvb3RlciAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb3JuZXJGb290ZXIoY29uZmlnKTtcbiAgICBsZXQgJGZvb3RlciAgICAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVGb290ZXIoY29uZmlnKTtcbiAgICBsZXQgJGZsb2F0Qm94Q29udGFpbmVyICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVGbG9hdEJveChjb25maWcsIGluaXRpYWxUYWIpO1xuICAgIGxldCAkc2VsZWN0Q29udGFpbmVyICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZVNlbGVjdEJvYXJkKGNvbmZpZyk7XG4gICAgbGV0ICRwbG90VmVydGljYWxDb250YWluZXIgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlUGxvdFZlcnRpY2FsQ29udGFpbmVyKGNvbmZpZyk7XG4gICAgbGV0ICRwbG90SG9yaXpvbnRhbENvbnRhaW5lciA9IHRhYmxlRWxlbWVudHMuY3JlYXRlUGxvdEhvcml6b250YWxDb250YWluZXIoY29uZmlnKTtcbiAgICBsZXQgJGRldGFpbERheSAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVEZXRhaWxEYXkoY29uZmlnLCBmaXJzdENoaWxkcmVuKTtcblxuICAgIGxldCB7IGVsZW06JGNvbnRleHRNZW51LCBpc1Zpc2libGUgfSAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUNvbnRleHRNZW51KHtjb25maWd9KTtcbiAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ID0gaXNWaXNpYmxlO1xuXG4gICAgbGV0ICRuYXZSaWdodCwgaW5wdXRzLCBpbnB1dHNXaXRoUmVsb2FkLCBzYXZlQ2FuY2VsQnRucztcbiAgICAoe2VsZW1lbnQ6JG5hdlJpZ2h0LCBpbnB1dHMsIGlucHV0c1dpdGhSZWxvYWQsIHNhdmVDYW5jZWxCdG5zfSA9IHRhYmxlRWxlbWVudHMuY3JlYXRlTmF2UmlnaHQoY29uZmlnKSk7XG5cbiAgICBsZXQgJG1vYmlsZUZvb3RlciA9IHRhYmxlRWxlbWVudHMuY3JlYXRlTW9iaWxlRm9vdGVyKGNvbmZpZyk7XG5cbiAgICBsZXQgJGJhY2tncm91bmQgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQmFja2dyb3VuZChjb25maWcpO1xuICAgIGxldCAkY29udGFpbmVyICAgICAgID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6XCJjb250YWluZXItdGxcIn0pO1xuICAgIGxldCAkZGF5TW91c2VPdmVyICAgID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGF5LW1vdXNlLW92ZXJcIn0pO1xuXG4gICAgbGV0IHtoZWlnaHQsIHdpZHRoIH0gPSB1dGlscy5nZXRUYWJsZURpbWVuc2lvbnMoY29uZmlnKTtcbiAgICBsZXQgJHRhYmxlICAgICAgICAgICA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRhYmxlXCIsIHN0eWxlOntcbiAgICAgICd3aWR0aCc6IHdpZHRoK1wicHhcIixcbiAgICAgICdoZWlnaHQnOiBoZWlnaHQrXCJweFwiXG4gICAgfX0pO1xuXG4gICAgJHRhYmxlLmFwcGVuZENoaWxkKCRiYWNrZ3JvdW5kKTtcbiAgICAkdGFibGUuYXBwZW5kQ2hpbGQoJGRheU1vdXNlT3Zlcik7XG4gICAgJHRhYmxlLmFwcGVuZENoaWxkKCRkZXRhaWxEYXkpO1xuICAgICR0YWJsZS5hcHBlbmRDaGlsZCgkc2VsZWN0Q29udGFpbmVyKTtcbiAgICAkdGFibGUuYXBwZW5kQ2hpbGQoJGZsb2F0Qm94Q29udGFpbmVyICk7XG5cbiAgICBpZigkaGVhZGVyRXh0ZW5kZWQpe1xuICAgICAgJGhlYWRlci5hcHBlbmRDaGlsZCgkaGVhZGVyRXh0ZW5kZWQpO1xuICAgIH1cblxuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJGhlYWRlcik7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkcGxvdFZlcnRpY2FsQ29udGFpbmVyKTtcbiAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRwbG90SG9yaXpvbnRhbENvbnRhaW5lcik7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkdG9kYXlMaW5lKTtcbiAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRuYXZMZWZ0KTtcbiAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCR0YWJsZSk7XG5cbiAgICBpZigkY29ybmVyRm9vdGVyKSAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRjb3JuZXJGb290ZXIpO1xuXG4gICAgaWYoJGZvb3RlcikgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkZm9vdGVyKTtcblxuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkaGVhZGVyVG9wKTtcbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJGNvcm5lcik7XG4gICAgJGNhcGliYXJhLmFwcGVuZENoaWxkKCRjb3JuZXJSaWdodCk7XG4gICAgJGNhcGliYXJhLmFwcGVuZENoaWxkKCRjb250YWluZXIpO1xuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkbW9iaWxlRm9vdGVyKTtcbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJG5hdlJpZ2h0KTtcbiAgICBpZigkY29udGV4dE1lbnUpICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29udGV4dE1lbnUpO1xuXG5cbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodCAgID0gaW5wdXRzO1xuICAgIHRoaXMuJGlucHV0c1dpdGhSZWxvYWQgPSBpbnB1dHNXaXRoUmVsb2FkO1xuICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zID0gc2F2ZUNhbmNlbEJ0bnM7XG4gICAgdGhpcy4kY2FwaWJhcmEgPSAkY2FwaWJhcmE7XG4gICAgdGhpcy4kZWxlbWVudHMgPSB7XG4gICAgICAkaGVhZGVyVG9wLFxuICAgICAgJGRldGFpbERheSxcbiAgICAgICRjb250ZXh0TWVudSxcbiAgICAgICRmbG9hdEJveENvbnRhaW5lcixcbiAgICAgICRzZWxlY3RDb250YWluZXIsXG4gICAgICAkdGFibGUsXG4gICAgICAkYmFja2dyb3VuZCxcbiAgICAgICRwbG90VmVydGljYWxDb250YWluZXIsXG4gICAgICAkcGxvdEhvcml6b250YWxDb250YWluZXIsXG4gICAgICAkZGF5TW91c2VPdmVyLFxuICAgICAgJGNvbnRhaW5lcixcbiAgICAgICRuYXZSaWdodCxcbiAgICAgICRuYXZMZWZ0LFxuICAgICAgJGhlYWRlcixcbiAgICAgICR0b2RheUxpbmUsXG4gICAgICAkY29ybmVyLFxuICAgICAgJGNvcm5lclJpZ2h0LFxuICAgICAgJG1vYmlsZUZvb3RlclxuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCgkY2FwaWJhcmEpO1xuICAgIHRoaXMuc2VsZWN0VGFiKGluaXRpYWxUYWIpO1xuXG4gICAgcmV0dXJuICRjYXBpYmFyYTtcbiAgfVxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBDYW1iaWEgZWwgbW9kbyBvc2N1cm8sIHNlZ3VuIGVsIGVzdGFkbyBhY3R1YWxcbiAgICovXG4gIHRvZ2dsZURhcmsoKXtcbiAgICB0aGlzLnNldERhcmsoIUJvb2xlYW4odGhpcy5jb25maWcudGltZWxpbmUuZGFyaykpO1xuICB9XG5cblxuICAvKipcbiAgICogQ2FtYmlhIGVsIG1vZG8gb3NjdXJvLCBzZWd1biBwYXJhbWV0cm9cbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSBbaXNEYXJrID0gZmFsc2VdIC0gaW5kaWNhIHNpIHNlIGFjdGl2YSBlbCBtb2RvIG9zY3VybyBvIG5vXG4gICAqL1xuICBzZXREYXJrKCBpc0RhcmsgPSBmYWxzZSl7XG4gICAgbGV0IGRhcmtDbGFzc05hbWUgPSBcImRhcmstdGhlbWVcIjtcbiAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5kYXJrID0gaXNEYXJrO1xuXG4gICAgaWYoaXNEYXJrKXtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5hZGQoZGFya0NsYXNzTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5yZW1vdmUoZGFya0NsYXNzTmFtZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBDYW1iaWEgZWwgdGVtYSBkZSBjb2xvciBzZWN1bmRhcmlvLCBzZWd1biBwYXJhbWV0cm9cbiAgICogIC1RdWl0YSB0b2RvcyBsb3MgcG9zaWJsZXMgY29sb3JlcyBkZSBsYSBwbGFuaWxsYSwgb2J0ZW5pZW5kb2xvcyBkZSBUYWJzXG4gICAqICAtQWdyZWdhIGVsIGNvbG9yIGVudmlhZG8gcG9yIHBhcmFtZXRybyBjb21vIGNsYXNlIGRlbCBkb21FbGVtZW50ICRjYXBpYmFyYVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29sb3IgLSBjb2xvciwgY29tbyBub21icmUgZGUgY2xhc2UsIHBhcmEgYWdyZWdhciBcbiAgICovXG4gIGNoYW5nZUNvbG9yVGhlbWUoY29sb3Ipe1xuICAgIHRoaXMuY29uZmlnLnRpbWVsaW5lLnRhYnMuZm9yRWFjaCh0YWIgPT4ge1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZSh0YWIuY29sb3IpO1xuICAgIH0pO1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5hZGQoY29sb3IpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBTZWxlY2Npb25hIHRhYiBlbiBwbGFuaWxsYVxuICAgKiBzaSByZWRyYXcgPT0gdHJ1ZSAsIHJlZGlidWphIG5hdlJpZ2h0IHkgZmxvYXRCb3hcbiAgICogeWEgcXVlIHNvbiBpbnB1dHMgeSBlc3RldGljYXMgcGVyc29uYWxpemFkYXMgcG9yIFRhYlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gdGFiLCBvYnRlbmlkYSBkZXNkZSBjb25maWd1cmFjaW9uXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JlZHJhdz10cnVlXSAtIG9wY2lvbiBkZSByZWRpYnVqYWRvXG4gICAqL1xuICBzZWxlY3RUYWIodGFiLCByZWRyYXcgPSB0cnVlKXtcbiAgICBpZih0YWIpe1xuICAgICAgdGhpcy50YWJTZWxlY3RlZCA9IHRhYjtcblxuICAgICAgdGhpcy5jbGVhbk11bHRpSW5wdXQoKTtcblxuICAgICAgaWYocmVkcmF3KXtcbiAgICAgICAgdGhpcy5yZWRyYXcoe1xuICAgICAgICAgIGhlYWRlclRvcDp0cnVlLFxuICAgICAgICAgIGNvcm5lckxlZnQ6IHRydWUsXG4gICAgICAgICAgbmF2TGVmdDogdHJ1ZSxcbiAgICAgICAgICBuYXZSaWdodDogdHJ1ZSxcbiAgICAgICAgICBmbG9hdEJveDp0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hhbmdlQ29sb3JUaGVtZSh0YWIuY29sb3IpO1xuXG4gICAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNlbGVjdFRhYlwiLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBkZXRhaWw6e1xuICAgICAgICAgIHRhYlNlbGVjdGVkIDogdGhpcy50YWJTZWxlY3RlZFxuICAgICAgICB9XG4gICAgICB9KSk7XG5cbiAgICB9ZWxzZXtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJ0YWIgbm8gZW5jb250cmFkYVwiKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RMZWdlbmQoZXZ0KXtcbiAgICBsZXQgbGVnZW5kID0gZXZ0LmRldGFpbC5sZWdlbmQ7XG4gICAgZXZ0LmRldGFpbC4kbGVnZW5kLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XG4gICAgaWYobGVnZW5kKXtcbiAgICAgIGxlZ2VuZC5hY3RpdmUgPSAhbGVnZW5kLmFjdGl2ZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZHJhdyh7XG4gICAgICBmbG9hdEJveDogdHJ1ZSxcbiAgICAgIGRldGFpbERheTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIG11ZXN0cmEgYWx0ZXJuYWRhbWVudGUgbG9zIHNpZGViYXIgaW5pdGlhbCB5IGV4dGVuZGVkXG4gICAqL1xuICB0b2dnbGVTaWRlYmFyKCl7XG4gICAgdGhpcy5zZXRTaG93TmF2SW5pdGlhbCghdGhpcy5pc1Nob3dOYXZJbml0aWFsKTtcbiAgICBpZighdGhpcy5pc01vYmlsZSl7XG4gICAgICB0aGlzLnNldFNob3dOYXZFeHRlbmRlZCghdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCk7XG4gICAgfWVsc2V7XG4gICAgICBsZXQgY29ybmVySW5wdXRUaXRsZXMgPSB0aGlzLiRlbGVtZW50cy4kY29ybmVyLnF1ZXJ5U2VsZWN0b3IoXCIuaW5wdXQtdGl0bGVzXCIpO1xuICAgICAgaWYoY29ybmVySW5wdXRUaXRsZXMpe1xuICAgICAgICBjb3JuZXJJbnB1dFRpdGxlcy5zdHlsZS5kaXNwbGF5ID0gdGhpcy5pc1Nob3dOYXZJbml0aWFsID8gXCJub25lXCI6IFwiZmxleFwiO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPY3VsdGEgbmF2IGluaXRpYWwgLCBleHRlbmRlZCB5IGJ1dHRvbnNcbiAgICovXG4gIGhpZGVTaWRlYmFycygpe1xuICAgIHRoaXMuc2V0U2hvd05hdkluaXRpYWwoZmFsc2UpO1xuICAgIHRoaXMuc2V0U2hvd05hdkV4dGVuZGVkKGZhbHNlKTtcbiAgICB0aGlzLnNldFNob3dOYXZCdXR0b25zKGZhbHNlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvT2N1bHRhIFNpZGViYXIgaW5pY2lhbFxuICAgKi9cbiAgc2V0U2hvd05hdkluaXRpYWwoaXNTaG93TmF2SW5pdGlhbCl7XG4gICAgdGhpcy5pc1Nob3dOYXZJbml0aWFsICA9IGlzU2hvd05hdkluaXRpYWw7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0SW5pdGlhbFN0eWxlKHRoaXMuY29uZmlnLCB0aGlzLmlzU2hvd05hdkluaXRpYWwsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvT2N1bHRhIFNpZGViYXIgZXh0ZW5kaWRvXG4gICAqL1xuICBzZXRTaG93TmF2RXh0ZW5kZWQoaXNTaG93TmF2RXh0ZW5kZWQpe1xuICAgIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQgPSBpc1Nob3dOYXZFeHRlbmRlZDtcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRFeHRlbmRlZFN0eWxlKHRoaXMuY29uZmlnLCB0aGlzLmlzU2hvd05hdkV4dGVuZGVkLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWVzdHJhL09jdWx0YSBTaWRlYmFyIGJ1dHRvbnNcbiAgICovXG4gIHNldFNob3dOYXZCdXR0b25zKGlzU2hvd05hdkJ1dHRvbnMpe1xuICAgIHRoaXMuaXNTaG93TmF2QnV0dG9ucyA9IGlzU2hvd05hdkJ1dHRvbnM7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0QnV0dG9uc1N0eWxlKHRoaXMuY29uZmlnLCB0aGlzLmlzU2hvd05hdkJ1dHRvbnMsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBNdWVzdHJhL29jdWx0YSBTaWRlYmFyIERlcmVjaG9cbiAgICovXG4gIHRvZ2dsZVNpZGViYXJSaWdodCgpe1xuICAgIGxldCBpc0hpZGRlbiA9ICF0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3QuY29udGFpbnMoXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgICB0aGlzLnNldFZpc2libGVTaWRlYmFyUmlnaHQoIWlzSGlkZGVuKTtcbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmljYSBsYSBvcGNpb24gZGUgbW9zdHJhciB5IG9jdWx0YXIgc2lkZWJhciBkZXJlY2hvXG4gICAqXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IFtzaG93ID0gdHJ1ZV0gLSBpbmRpY2Egc2kgZGViZSBtb3N0cmFyc2UgdSBvY3VsdGFyc2VcbiAgICovXG4gIHNldFZpc2libGVTaWRlYmFyUmlnaHQoc2hvdyA9IHRydWUpe1xuICAgIGxldCBmbiA9IHNob3cgPyBcImFkZFwiIDogXCJyZW1vdmVcIjtcbiAgICB0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3RbZm5dKFwiZXh0ZW5kZWQtcmlnaHRcIik7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBNdWVzdHJhL29jdWx0YSBIZWFkZXIgZXh0ZW5kaWRvIChpbnB1dHMpXG4gICAqL1xuICB0b2dnbGVIZWFkZXIoKXtcbiAgICB0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3QudG9nZ2xlKFwiaGVhZGVyLWV4dGVuZGVkXCIpO1xuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxWYXJzKCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvb2N1bHRhIGJhcnJhIGRlIGNhcmdhIGRlIHBsYW5pbGxhIFxuICAgKiBTaSBzZSBsbGFtYSBzaW4gcGFyYW1ldHJvcywgcG9yIGRlZmVjdG8gbXVlc3RyYSBlbCBsb2FkaW5nIGRlcmVjaG9cbiAgICogcXVlIGNvcnJlc3BvbmRlIGFsIHNpZGViYXItcmlnaHRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtwb3NpdGlvbiA9IFwicmlnaHRcIl0gLSBlc2NvZ2UgbG9hZGluZywgcHVlZGUgc2VyIFwibGVmdFwiIHwgXCJyaWdodFwiXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Nob3cgPSB0cnVlXSAtIGluZGljYSBzaSBtb3N0cmFyIHUgb2N1bHRhciBsb2FkaW5nXG4gICAqL1xuICBsb2FkaW5nKHBvc2l0aW9uID0gXCJyaWdodFwiLCBzaG93ID0gdHJ1ZSl7XG4gICAgbGV0IGZuICAgICAgPSBzaG93ID8gXCJyZW1vdmVcIiA6IFwiYWRkXCI7XG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLiRjYXBpYmFyYS5xdWVyeVNlbGVjdG9yKFwiLnByb2dyZXNzLWJhci1cIitwb3NpdGlvbik7XG4gICAgZWxlbWVudC5jbGFzc0xpc3RbZm5dKFwiaGlkZS1wcm9ncmVzc1wiKTtcbiAgfVxuXG5cblxuICBzZXREaXNhYmxlSW5wdXRzTmF2UmlnaHQoaXNEaXNhYmxlZCA9IHRydWUpe1xuICAgIHRoaXMuaXNEaXNhYmxlZElucHV0c05hdlJpZ2h0ID0gaXNEaXNhYmxlZDtcbiAgICBcbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodC5mb3JFYWNoKCRpbnB1dENvbnRhaW5lciA9PiB7XG4gICAgICBsZXQgJGlucHV0cyA9ICRpbnB1dENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIik7XG4gICAgICAkaW5wdXRzLmZvckVhY2goJGkgPT4ge1xuICAgICAgICAkaS5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBpc0Rpc2FibGVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGxldCBidG5zID0gdGhpcy4kc2F2ZUNhbmNlbEJ0bnMucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvblwiKTtcblxuICAgIGJ0bnMuZm9yRWFjaChidG4gPT4ge1xuICAgICAgICBidG4uc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgaXNEaXNhYmxlZCk7XG4gICAgfSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBCdXNjYSB1biBib3RvbiBzZWd1biBzZWxlY3RvciwgeSBsZSBhZ3JlZ2EgbGEgY2xhc2UgXCJsb2FkaW5nXCJcbiAgICogeSBkZXNoYWJpbGl0YSBlbCBib3RvblxuICAgKlxuICAgKiBAcGFyYW0geyBTdHJpbmcgfSBbIHNlbGVjdG9yID0gJ1tjYXAtYnRuLWNhbGVuZGFyXScgXSAtIHNlbGVjdG9yIGRlIGJvdG9uXG4gICAqIEBwYXJhbSB7IEJvb2xlYW4gfSBbaXNMb2FkaW5nICA9IHRydWVdIC0gZGVmaW5lIHNpIGVzdGEgY2FyZ2FuZG8gbyBub1xuICAgKi9cbiAgbG9hZGluZ0J0bihzZWxlY3Rvcj0gXCJbY2FwLWJ0bi1jYWxlbmRhcl1cIiwgaXNMb2FkaW5nID0gdHJ1ZSl7XG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLiRjYXBpYmFyYS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBpZihlbGVtZW50KXtcbiAgICAgIGxldCBmbiA9IGlzTG9hZGluZyA/IFwiYWRkXCIgOiBcInJlbW92ZVwiO1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3RbZm5dKFwibG9hZGluZ1wiKTtcbiAgICAgIGlmKGlzTG9hZGluZyl7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIixcIlwiKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cblxuXG4gIC8qKlxuICAgKiBDcmVhIEV2ZW50byBkZSBndWFyZGFkbyBkZSBsb3MgaW5wdXRzIGRlbCBTaWRlYmFyIFJpZ2h0XG4gICAqIG9idGllbmUgdG9kb3MgbG9zIHZhbG9yZXMgZGUgbG9zIGlucHV0cyByZWdpc3RyYWRvcyBlbiB0aGlzLiRpbnB1dHMgeSBcbiAgICogbG9zIHJldG9ybmEgY3JlYW5kbyBlbCBldmVudG8gXCJzYXZlXCJcbiAgICpcbiAgICovXG4gIHNhdmVJbnB1dHNOYXZSaWdodCgpe1xuXG4gICAgbGV0IGlucHV0VmFsdWVzID0gW107XG5cbiAgICBsZXQgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVJbnB1dHNOYXZSaWdodCgpO1xuXG4gICAgaWYoIWlzVmFsaWQpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0RGlzYWJsZUlucHV0c05hdlJpZ2h0KHRydWUpO1xuXG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQuZm9yRWFjaCgkaW5wdXQgPT4ge1xuICAgICAgbGV0IGtleSA9ICRpbnB1dC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG4gICAgICBsZXQgaW5wdXRDb25maWcgPSB0aGlzLnRhYlNlbGVjdGVkLmlucHV0cy5maW5kKHQgPT4gdC5rZXkgPT0ga2V5KTtcbiAgICAgIGlmKGlucHV0Q29uZmlnKXtcbiAgICAgICAgaW5wdXRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAga2V5ICAgICAgICAgOiBrZXksXG4gICAgICAgICAgaW5wdXRDb25maWcgOiBpbnB1dENvbmZpZyxcbiAgICAgICAgICBlbCAgICAgICAgICA6ICRpbnB1dCxcbiAgICAgICAgICB2YWx1ZSAgICAgICA6IHRoaXMuZ2V0SW5wdXRWYWx1ZSgkaW5wdXQsIGlucHV0Q29uZmlnKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgdGhpcy4kY2FwaWJhcmEuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJzYXZlXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIGRldGFpbDp7XG4gICAgICAgIGlucHV0VmFsdWVzIDogaW5wdXRWYWx1ZXMsXG4gICAgICAgIHNlbGVjdGVkICAgIDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGFiU2VsZWN0ZWQgOiB0aGlzLnRhYlNlbGVjdGVkXG4gICAgICB9XG4gICAgfSkpO1xuXG5cbiAgfVxuXG4gIHZhbGlkYXRlSW5wdXRzTmF2UmlnaHQoKXtcbiAgICBsZXQgaXNGb3JtVmFsaWQgPSB0cnVlO1xuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0LmZvckVhY2goJGlucHV0ID0+IHtcbiAgICAgIGxldCBpc0lucHV0VmFsaWQgPSB0cnVlO1xuICAgICAgbGV0IGtleSA9ICRpbnB1dC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG4gICAgICBsZXQgaW5wdXRDb25maWcgPSB0aGlzLnRhYlNlbGVjdGVkLmlucHV0cy5maW5kKHQgPT4gdC5rZXkgPT0ga2V5KTtcbiAgICAgIGlmKGlucHV0Q29uZmlnKXtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRJbnB1dFZhbHVlKCRpbnB1dCwgaW5wdXRDb25maWcpO1xuICAgICAgICBpZihpbnB1dENvbmZpZy5yZXF1aXJlZCl7XG4gICAgICAgICAgaWYodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgaXNGb3JtVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlzSW5wdXRWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGlucHV0Q29uZmlnLnZhbGlkYXRpb24gJiYgIWlucHV0Q29uZmlnLnZhbGlkYXRpb24oe3ZhbHVlICwgaW5wdXRDb25maWcsICRpbnB1dH0pICl7XG4gICAgICAgICAgaXNGb3JtVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICBpc0lucHV0VmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0lucHV0VmFsaWQpe1xuICAgICAgICAgICRpbnB1dC5jbGFzc0xpc3QuYWRkKFwiaXMtaW52YWxpZFwiKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgJGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpc0Zvcm1WYWxpZCA7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYW5jZWxhIGZvcm11bGFyaW8gZGUgc2lkZWJhciByaWdodFxuICAgKiBFbiBtb2JpbGUsIHRhbWJpw6luIGRlc2FjdGl2YSBlbCBtb2RvIHNlbGVjY2nDs25cbiAgICovXG4gIGNhbmNlbE11bHRpSW5wdXQoKXtcbiAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNhbmNlbFwiLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICBkZXRhaWw6e1xuICAgICAgICBzZWxlY3RlZCAgICA6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRhYlNlbGVjdGVkIDogdGhpcy50YWJTZWxlY3RlZFxuICAgICAgfVxuICAgIH0pKTtcbiAgICB0aGlzLmNsZWFuTXVsdGlJbnB1dCgpO1xuICAgIGlmKHRoaXMuaXNNb2JpbGUgJiYgdGhpcy5tb2JpbGVTZWxlY3RhYmxlKXtcbiAgICAgIHRoaXMubW9iaWxlU2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25maWcudGltZWxpbmUubW9iaWxlU2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRTZWxlY3RhYmxlKGZhbHNlKTtcbiAgICAgIHRoaXMubGFzdEZvY3VzZWREYXkgPSBudWxsO1xuICAgICAgdGhpcy51cGRhdGVNb2JpbGVTZWxlY3RCdXR0b24oKTtcbiAgICAgIHRoaXMudXBkYXRlTW9iaWxlRm9vdGVyQnV0dG9uc1Zpc2liaWxpdHkoKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIExpbXBpYSBlbCBmb3JtdWxhcmlvIGVuIGVsIHNpZGViYXIgcmlnaHRcbiAgICogb2N1bHRhIGVsIHNpZGViYXIgcmlnaHRcbiAgICovXG4gIGNsZWFuTXVsdGlJbnB1dCgpe1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5yZW1vdmUoXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKTtcbiAgfVxuXG5cblxuXG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgdmFsb3IgZGUgdW4gaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW0gLSBlbGVtZW50byBkZWwgZG9tIHF1ZSByZXByZXNlbnRhIGFsIGlucHV0LCBubyBuZWNlc2FyaWFtZW50ZSBpbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gY29uZmlndXJhY2lvbiBkZSBpbnB1dFxuICAgKiBAcmV0dXJuIHsqfSB2YWxvciBkZWwgSW5wdXRcbiAgICovXG4gIGdldElucHV0VmFsdWUoZWxlbSwgaW5wdXRDb25maWcpe1xuICAgIGxldCB2YWx1ZSAgICAgICAgID0gbnVsbDtcbiAgICBsZXQgaW5wdXRFbGVtZW50ICA9IG51bGw7XG4gICAgbGV0IGlucHV0c0VsZW1lbnQgPSBudWxsO1xuXG4gICAgc3dpdGNoIChpbnB1dENvbmZpZy50eXBlKSB7XG5cbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIHZhbHVlID0gaW5wdXRDb25maWcuZ2V0VmFsdWUgPyBpbnB1dENvbmZpZy5nZXRWYWx1ZSh7ZWxlbSwgcHJvcHM6IGlucHV0Q29uZmlnfSkgOiBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICBsZXQgaGhFbGVtZW50PSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIuaG91clwiKTtcbiAgICAgICAgbGV0IG1tRWxlbWVudD0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiLm1pbnV0ZXNcIik7XG4gICAgICAgIGxldCBoaFZhbHVlID0gaGhFbGVtZW50LnZhbHVlO1xuICAgICAgICBsZXQgbW1WYWx1ZSA9IG1tRWxlbWVudC52YWx1ZTtcbiAgICAgICAgaWYoaGhWYWx1ZSl7XG4gICAgICAgICAgaGhWYWx1ZSA9IHBhcnNlRmxvYXQoaGhWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYobW1WYWx1ZSl7XG4gICAgICAgICAgbW1WYWx1ZSA9IHBhcnNlRmxvYXQobW1WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB7aGg6aGhWYWx1ZSwgbW06IG1tVmFsdWV9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIGlucHV0RWxlbWVudCA9IGVsZW0ucXVlcnlTZWxlY3RvcihcInRleHRhcmVhXCIpO1xuICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSB8fCAnJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpbnB1dExpc3RcIjpcbiAgICAgICAgbGV0IHZhbHVlc0lucHV0cyA9IFtdO1xuICAgICAgICBpbnB1dHNFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ11cIik7XG4gICAgICAgIGlucHV0c0VsZW1lbnQuZm9yRWFjaChpbnB1dEVsZW1lbnQgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZUlucHV0ID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmKHZhbHVlSW5wdXQpe1xuICAgICAgICAgICAgdmFsdWVJbnB1dCA9IHBhcnNlRmxvYXQodmFsdWVJbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBsYWJlbCA9IGlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1sYWJlbFwiKTtcbiAgICAgICAgICBsZXQgaWQgPSBpbnB1dEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaW5wdXQtaWRcIik7XG4gICAgICAgICAgdmFsdWVzSW5wdXRzLnB1c2goe2xhYmVsOmxhYmVsLCB2YWx1ZTp2YWx1ZUlucHV0ICwgaWQ6IGlkfSk7XG4gICAgICAgIH0pXG4gICAgICAgIHZhbHVlID0gdmFsdWVzSW5wdXRzO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ11cIik7XG4gICAgICAgIHZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuICAgICAgICBpZih2YWx1ZSl7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFt0eXBlPSdjaGVja2JveCddXCIpO1xuICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC5jaGVja2VkO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwic2VsZWN0LmlucHV0LXNlbGVjdFwiKTtcbiAgICAgICAgbGV0IGlucHV0VmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgIHZhbHVlID0gaW5wdXRDb25maWcub3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PSBpbnB1dFZhbHVlKVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIGlucHV0RWxlbWVudCA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0W3R5cGU9J2ZpbGUnXVwiKTtcbiAgICAgICAgdmFsdWUgPSBpbnB1dEVsZW1lbnQuZmlsZXM7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdpbnB1dC1ib3gnOlxuICAgICAgICBpbnB1dHNFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dFwiKTtcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgaW5wdXRzRWxlbWVudC5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgIGxldCB2ID0gaS52YWx1ZTtcbiAgICAgICAgICBpZih2KXtcbiAgICAgICAgICAgIHYgPSBwYXJzZUZsb2F0KHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZS5wdXNoKHtcbiAgICAgICAgICAgIGlkICAgIDogaS5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1pZFwiKSxcbiAgICAgICAgICAgIGtleSAgIDogaS5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIiksXG4gICAgICAgICAgICB2YWx1ZSA6IHYsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0YS1saXN0JzpcdFxuICAgICAgICBpbnB1dHNFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvblwiKTtcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgaW5wdXRzRWxlbWVudC5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgIGxldCB2ID0gaS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbHVlXCIpXG4gICAgICAgICAgaWYodil7XG4gICAgICAgICAgICB2ID0gcGFyc2VGbG9hdCh2KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUucHVzaCh7XG4gICAgICAgICAgICBpZCAgICA6IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKSxcbiAgICAgICAgICAgIGtleSAgIDogaS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWtleVwiKSxcbiAgICAgICAgICAgIHZhbHVlIDogdiB8fCBudWxsLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgICAgLy9ubyBlcyByZWFsbWVudGUgdW4gaW5wdXQsIGVzIHNvbG8gdW4gdGV4dG9cbiAgICAgICAgLy9ubyBlcyBuZWNlc2FyaW8gb2J0ZW5lciB2YWxvcmVzIGRlIGFxdWlcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgICAgIGlmKGlucHV0RWxlbWVudCl7XG4gICAgICAgICAgdmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBGdW5jaW9uIGxsYW1hZGEgYWwgcGFzYXIgc29icmUgdW4gaXRlbSBkZWwgc2lkZWJhciBpenF1aWVyZG8sIFxuICAgKiBwYXJhIG1vc3RyYXIgdW4gZGV0YWxsZSBkZWwgaXRlbVxuICAgKiBcbiAgICogRWwgZGV0YWxsZSBkZWwgaXRlbSBzZSBhbmNsYSBkZSBtYW5lcmEgc3VwZXJpb3IgbyBpbmZlcmlvciBkZXBlbmRpZW5kbyBkZSBcbiAgICogbGEgcG9zaWNpb24gZWwgbW91c2UgZW4gcGFudGFsbGEsIHBhcmEgbm8gc2FsaXIgZGVsIGNhbXBvIHZpc3VhbCBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtICBFdmVudG8gcmV0b3JuYWRvIHBvciB1biBtb3VzZW92ZXJcbiAgICovXG4gIG92ZXJOYXZJdGVtKGV2dCl7XG4gICAgbGV0IHBvcyAgICAgPSBldnQuZGV0YWlsLnBvcztcbiAgICBsZXQgaXRlbSAgICA9IGV2dC5kZXRhaWwuaXRlbTtcbiAgICAvL2xldCBkYXRhRGF5ID0gZXZ0LmRldGFpbC5kYXRhO1xuICAgIGxldCAkZGV0YWlsID0gdGhpcy4kZWxlbWVudHMuJG5hdkxlZnQucXVlcnlTZWxlY3RvcihcIi5kZXRhaWwtbmF2LWl0ZW1cIik7XG5cbiAgICBpZigkZGV0YWlsLmNsYXNzTGlzdC5jb250YWlucyhcImhpZGVcIikpe1xuICAgICAgJGRldGFpbC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICB9O1xuXG4gICAgJGRldGFpbC5pbm5lckhUTUwgPSB0YWJsZUVsZW1lbnRzLmdldERldGFpbE5hdkl0ZW1Db250ZW50KGl0ZW0pO1xuXG4gICAgaWYocG9zLnlQZXJjZW50ID4gNTApeyAvL21heW9yIGEgNTAlXG4gICAgICBpZighJGRldGFpbC5jbGFzc0xpc3QuY29udGFpbnMoXCJ0by1ib3R0b21cIikpe1xuICAgICAgICAkZGV0YWlsLmNsYXNzTGlzdC5hZGQoXCJ0by1ib3R0b21cIik7XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBpZigkZGV0YWlsLmNsYXNzTGlzdC5jb250YWlucyhcInRvLWJvdHRvbVwiKSl7XG4gICAgICAgICRkZXRhaWwuY2xhc3NMaXN0LnJlbW92ZShcInRvLWJvdHRvbVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkZGV0YWlsLnN0eWxlLnRvcCA9IHBvcy50b3ArXCJweFwiO1xuICB9XG5cblxuICAvKipcbiAgICogT2N1bHRhIGRldGFsbGUgZGUgaXRlbSBlbiBzaWRlYmFyIGl6cXVpZXJkbyBcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtICBFdmVudG8gcmV0b3JuYWRvIHBvciB1biBtb3VzZW92ZXJcbiAgICovXG4gIGxlYXZlTmF2SXRlbSgpe1xuICAgIHRoaXMuJGVsZW1lbnRzLiRuYXZMZWZ0LnF1ZXJ5U2VsZWN0b3IoXCIuZGV0YWlsLW5hdi1pdGVtXCIpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICB9XG5cblxuICAvKipcbiAgICogQ2FwdHVyYSBldmVudG8gbW91c2Vtb3ZlIGRlIGZsb2F0Qm94Q29udGFpbmVyXG4gICAqIHBhcmEgcmVmcmVzY2FyIGxhIHBvc2ljaW9uIHkgZGV0ZW5lciBwb3N0ZXJpb3JlcyBldmVudG9zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2Vtb3ZlXG4gICAqL1xuICBtb3VzZU1vdmVPbkZsZXhCb3hDb250YWluZXIoZXZ0KXtcbiAgICBsZXQgcG9zaXRpb24gPSB1dGlscy5ldmVudFRvUG9zaXRpb24odGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcbiAgICB0aGlzLnJlZnJlc2hEZXRhaWxEYXlQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyYSBldmVudG8gbW91c2VsZWF2ZSBkZSBmbG9hdEJveENvbnRhaW5lclxuICAgKiBwYXJhIG9jdWx0YXIgZGV0YWlsRGF5XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2VsZWF2ZVxuICAgKi9cbiAgbW91c2VMZWF2ZU9uRmxvYXRCb3hDb250YWluZXIoZXZ0KXtcbiAgICB0aGlzLmhpZGVEZXRhaWxEYXkoKTtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamEgZWwgY2xpYyBmdWVyYSBkZWwgZGl2IGVzcGVjw61maWNvXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gRWwgZXZlbnRvIGRlIGNsaWNcbiAgICovXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudCkge1xuICAgIGlmICghdGhpcy5pc01vYmlsZSAmJiB0aGlzLiRlbGVtZW50cyAmJiB0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5ICYmICF0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZWwgZXZlbnRvIG1vdXNlbW92ZSBlbiAkdGFibGUsIHBhcmEgaW5kaWNhciBsYSBwb3NpY2lvbiBkZSAkZGF5TW91c2VPdmVyXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2VsZWF2ZVxuICAgKi9cbiAgbW91c2VNb3ZlT25UYWJsZShldnQpe1xuICAgIGlmKHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUpIHJldHVybjtcbiAgICBsZXQgcG9zID0gdXRpbHMuZXZlbnRUb1Bvc2l0aW9uKHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgaWYodGhpcy5sYXN0TW91c2VQb3NpdGlvbiA9PSBudWxsIHx8IFxuICAgICAgdGhpcy5sYXN0TW91c2VQb3NpdGlvbi5sZWZ0ICE9IHBvcy5sZWZ0IHx8XG4gICAgICB0aGlzLmxhc3RNb3VzZVBvc2l0aW9uLnRvcCAhPSBwb3MudG9wXG4gICAgKXtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRkYXlNb3VzZU92ZXIuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIrcG9zLmxlZnQrXCJweCAsXCIrcG9zLnRvcCtcInB4KVwiO1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmxhc3RNb3VzZVBvc2l0aW9uID0gcG9zO1xuICAgIH1cbiAgfTtcblxuXG5cbiAgcmlnaHRDbGlja09uQ2FwaWJhcmEoZXZ0KXtcbiAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5jb250ZXh0TWVudSl7XG4gICAgICB0aGlzLmhpZGVEZXRhaWxEYXkoKTtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICByaWdodENsaWNrT25UYWJsZShldnQpe1xuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51KXtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnVPblRhYmxlKGV2dCk7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH07XG5cbiAgc2hvd0NvbnRleHRNZW51T25UYWJsZShldnQpe1xuXG4gICAgbGV0IGRhdGUgID0gdXRpbHMuZ2V0RGF5QnlFdmVudCh0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIGxldCBpdGVtICA9IHV0aWxzLmdldEl0ZW1CeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG5cbiAgICBpZih0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51KSB7XG4gICAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vbGV0IHBvc2l0aW9uID0gdXRpbHMuZXZlbnRUb1Bvc2l0aW9uKHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IHsgZWxlbTokZWxlbSwgaXNWaXNpYmxlIH0gPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUNvbnRleHRNZW51KHtcbiAgICAgIHRhYlNlbGVjdGVkOiB0aGlzLnRhYlNlbGVjdGVkLFxuICAgICAgJGNhcGliYXJhRWxlbSA6IHRoaXMuJGNhcGliYXJhLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGV2dCxcbiAgICAgIC8vcG9zaXRpb24sXG4gICAgICBkYXRlLFxuICAgICAgaXRlbSxcbiAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgbmFtZTogXCJvblRhYmxlXCJcbiAgICB9KTtcblxuICAgIGlmKCRlbGVtKXtcbiAgICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBpc1Zpc2libGU7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUucmVwbGFjZVdpdGgoJGVsZW0pO1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51ID0gJGVsZW07XG4gICAgfVxuICAgIGlmKGlzVmlzaWJsZSl7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZWwgZXZlbnRvIGNsaWNrIGVuICR0YWJsZSwgcGFyYSBzZWxlY2Npb25hciBkaWFzXG4gICAqIGxvcyBkaWFzIHNlbGVjY2lvbmFkb3Mgc2UgcmVnaXN0cmFuIGVuIHRoaXMuc2VsZWN0ZWRbXVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gRXZlbnRvIGRlIG1vdXNlbGVhdmVcbiAgICovXG4gIGNsaWNrT25UYWJsZShldnQpe1xuXG4gICAgbGV0IGRhdGUgID0gdXRpbHMuZ2V0RGF5QnlFdmVudCh0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIGxldCBwb3MgICA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbih0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIGxldCBpdGVtICA9IHV0aWxzLmdldEl0ZW1CeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG5cbiAgICAvL2lmKGl0ZW0gPT0gbnVsbCkgcmV0dXJuOyAvLyBjdWFubyBzZSBzZWxlY2Npb25hIHVuIGVzcGFjaW8gbm8gc2VsZWNjaW9uYWJsZVxuXG4gICAgLy9zaSBlcyBtb2JpbGUgeSBzZWxlY2Npw7NuIGRlc2hhYmlsaXRhZGEsIHNvbG8gbXVlc3RyYSBkZXRhbGxlcyAobm8gc2VsZWNjaW9uYSlcbiAgICBsZXQgZGF0YUJ5RGF0ZSA9IF8uZmluZChpdGVtLmRhdGEsIHtkYXRlfSk7XG4gICAgaWYodGhpcy5pc01vYmlsZSAmJiAhdGhpcy5tb2JpbGVTZWxlY3RhYmxlICYmIGRhdGFCeURhdGUpe1xuICAgICAgLy8gc2llbXByZSBhY3R1YWxpemFyIGRldGFpbC1kYXkgKGNvbiBvIHNpbiBkYXRvcykgcGFyYSBxdWUgbXVlc3RyZSBlbCBkw61hIHNlbGVjY2lvbmFkb1xuICAgICAgbGV0IG5ld0REQ29udGVudFN0cmluZyA9IHRhYmxlRWxlbWVudHMucmVkcmF3RGV0YWlsRGF5KHRoaXMuY29uZmlnLCBpdGVtLCBkYXRhQnlEYXRlLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICAgIGlmKG5ld0REQ29udGVudFN0cmluZyl7XG4gICAgICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuaW5uZXJIVE1MID0gbmV3RERDb250ZW50U3RyaW5nO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0RGF0YURheSA9IGRhdGFCeURhdGU7XG4gICAgICB0aGlzLmxhc3RGb2N1c2VkRGF5ID0gaXRlbSA/IHsgZGF0ZSwgaXRlbSwgcG9zIH0gOiBudWxsO1xuICAgICAgdGhpcy5mb2N1c09uRmxvYXRCb3goe3BvcywgZXZ0fSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmKHRoaXMuaXNNb2JpbGUgJiYgIXRoaXMubW9iaWxlU2VsZWN0YWJsZSAmJiBpdGVtKXtcbiAgICAgIHRoaXMubGFzdEZvY3VzZWREYXkgPSB7IGRhdGUsIGl0ZW0sIHBvcyB9O1xuICAgIH1cblxuICAgIGlmKCF0aGlzLmlzU2VsZWN0YWJsZSh7aXRlbSwgZGF0ZSwgZGF0YUJ5RGF0ZX0pKXtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0Tm9TZWxlY3RhYmxlXCIsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGRldGFpbDp7XG4gICAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICAgIHRhYlNlbGVjdGVkIDogdGhpcy50YWJTZWxlY3RlZCxcbiAgICAgICAgICBsYXN0U2VsZWN0aW9uIDoge2RhdGUsIGl0ZW0sIHBvc30sXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIHJldHVybjsgLy8gY3VhbmRvIHNlIHNlbGVjY2lvbmEgdW4gZXNwYWNpbyBubyBzZWxlY2Npb25hYmxlXG4gICAgfSBcblxuICAgIGxldCBldmVudE5hbWUgPSBcImRlc2VsZWN0RGF5XCI7XG5cbiAgICBpZih0aGlzLnRvZ2dsZVNlbGVjdChkYXRlLCBpdGVtLCBwb3MpKXtcbiAgICAgIGV2ZW50TmFtZSA9IFwic2VsZWN0RGF5XCI7XG4gICAgfVxuXG4gICAgdGhpcy4kY2FwaWJhcmEuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICBkZXRhaWw6e1xuICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgICBsYXN0U2VsZWN0aW9uIDoge2RhdGUsIGl0ZW0sIHBvc30sXG4gICAgICAgIHNlbGVjdGVkICAgIDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGFiU2VsZWN0ZWQgOiB0aGlzLnRhYlNlbGVjdGVkXG4gICAgICB9XG4gICAgfSkpO1xuXG4gIH07XG5cblxuXG5cblxuICB0b2dnbGVTZWxlY3QoZGF0ZSwgaXRlbSwgcG9zKXtcbiAgICBpZih0aGlzLmlzU2VsZWN0ZWQoZGF0ZSwgaXRlbSkpe1xuICAgICAgdGhpcy5kZXNlbGVjdChkYXRlLCBpdGVtKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuc2VsZWN0KGRhdGUsIGl0ZW0sIHBvcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cblxuXG5cblxuICBpc1NlbGVjdGVkKGRhdGUsIGl0ZW0pe1xuICAgIGxldCBpbmRleCA9IHV0aWxzLmluZGV4U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZCwge2RhdGUsIGl0ZW19KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMTtcbiAgfTtcblxuXG5cbiAgaXNTZWxlY3RhYmxlKHtpdGVtLCBkYXRlLCBkYXRhQnlEYXRlfSl7XG5cbiAgICBpZighdGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYoaXRlbS5zZWxlY3RhYmxlID09PSBmYWxzZSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYodGhpcy5jb25maWcudGltZWxpbmUubm9GdXR1cmVTZWxlY3RhYmxlKXtcbiAgICAgIGxldCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYoZCA+IHRvZGF5KXtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpdGVtSXNTZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICBpZih0aGlzLnRhYlNlbGVjdGVkICYmIHRoaXMudGFiU2VsZWN0ZWQuc2VsZWN0YWJsZUlmSGFzKXtcbiAgICAgIGlmKCFpdGVtLnZhbHVlc1t0aGlzLnRhYlNlbGVjdGVkLnNlbGVjdGFibGVJZkhhc10pe1xuICAgICAgICBpdGVtSXNTZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtSXNTZWxlY3RhYmxlO1xuICB9O1xuXG4gIHJlZHJhd1NlbGVjdGlvbigpe1xuICAgICAgdGhpcy5jaGVja0NsYXNzU2lkZWJhckV4dGVuZGVkUmlnaHQoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9iaWxlRm9vdGVyVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy51cGRhdGVNb2JpbGVGb290ZXJCdXR0b25zVmlzaWJpbGl0eSgpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdTZWxlY3RCb2FyZCh0aGlzLiRlbGVtZW50cy4kc2VsZWN0Q29udGFpbmVyLCB0aGlzLnNlbGVjdGVkKTtcbiAgfTtcblxuXG5cblxuXG5cbiAgZGVzZWxlY3QoZGF0ZSwgaXRlbSwgcmVkcmF3ID0gdHJ1ZSl7XG4gICAgaWYodGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pICApe1xuICAgICAgbGV0IGluZGV4ID0gdXRpbHMuaW5kZXhTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkLCB7ZGF0ZSwgaXRlbX0pO1xuICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SW5kZXhUb1NlbGVjdGVkKCk7XG5cbiAgICBpZihyZWRyYXcpe1xuICAgICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKVxuICAgIH1cbiAgfTtcblxuXG5cblxuXG5cblxuICBzZWxlY3QoZGF0ZSwgaXRlbSwgcG9zLCByZWRyYXcgPSB0cnVlLCByZWZyZXNoRm9ybSA9IHRydWUpe1xuICAgIGlmKCF0aGlzLmlzU2VsZWN0ZWQoZGF0ZSwgaXRlbSkpe1xuXG4gICAgICB0aGlzLnNlbGVjdGVkLnB1c2goe1xuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgaXRlbSxcbiAgICAgICAgcG9zLFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBkYXRhRGF5ID0gbnVsbDtcbiAgICAgIGlmKGl0ZW0uZGF0YSl7XG4gICAgICAgIGRhdGFEYXkgPSBpdGVtLmRhdGEuZmluZChkID0+IHtcbiAgICAgICAgICByZXR1cm4gZC5kYXRlID09IGRhdGU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBzaSBlcyBlbCBwcmltZXIgaXRlbSBzZWxlY2Npb25hZG8sIHNlIGF1dG9ycmVsbGVuYSBlbCBmb3JtdWxhcmlvIGRlIG5hdlJpZ2h0IChubyBlbiBtb2JpbGUgY29uIHNlbGVjY2nDs24pXG4gICAgICBpZih0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PSAxICYmIHJlZnJlc2hGb3JtICYmICEodGhpcy5pc01vYmlsZSAmJiB0aGlzLm1vYmlsZVNlbGVjdGFibGUpKXtcbiAgICAgICAgdGhpcy5yZWRyYXcoe1xuICAgICAgICAgIGNvcm5lclJpZ2h0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHtpbnB1dHMsIGVsZW1lbnQsIGlucHV0c1dpdGhSZWxvYWQsIHNhdmVDYW5jZWxCdG5zfSA9IHRhYmxlRWxlbWVudHMucmVkcmF3TmF2UmlnaHQodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRuYXZSaWdodCwgdGhpcy5zZWxlY3RlZCwgdGhpcy50YWJTZWxlY3RlZCwgZGF0YURheSwgdGhpcy5zZWxlY3RlZFswXSk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnRzLiRuYXZSaWdodCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ID0gaW5wdXRzO1xuICAgICAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkID0gaW5wdXRzV2l0aFJlbG9hZDtcbiAgICAgICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgPSBzYXZlQ2FuY2VsQnRucztcbiAgICAgIH1cblxuICAgIH1cblxuXG4gICAgbGV0IGZvY3VzZWQgPSBmYWxzZTtcbiAgICBpZighKHRoaXMuaXNNb2JpbGUgJiYgdGhpcy5tb2JpbGVTZWxlY3RhYmxlKSl7XG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQuZm9yRWFjaChpbnB1dE5hdlJpZ2h0ID0+IHtcbiAgICAgIGlmKCFmb2N1c2VkKXtcbiAgICAgICAgbGV0IHZhbGlkSW5wdXRzID0gaW5wdXROYXZSaWdodC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIik7XG4gICAgICAgIGlmKHZhbGlkSW5wdXRzICYmIHZhbGlkSW5wdXRzLmxlbmd0aCA+IDApe1xuICAgICAgICAgIGxldCBmaXJzdFZhbGlkSW5wdXQgPSBfLmZpcnN0KHZhbGlkSW5wdXRzKTtcblxuICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgXG4gICAgICAgICAgICBmaXJzdFZhbGlkSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgIGZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbmRleFRvU2VsZWN0ZWQoKTtcblxuICAgIGlmKHJlZHJhdyl7XG4gICAgICB0aGlzLnJlZHJhd1NlbGVjdGlvbigpXG4gICAgfVxuICB9O1xuXG5cbiAgc2V0SW5kZXhUb1NlbGVjdGVkKCl7XG4gICAgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKChzLCBpbmRleCkgPT4ge1xuICAgICAgcy5pbmRleCA9IGluZGV4KzE7XG4gICAgfSlcbiAgfTtcblxuXG4gIGlzU2VsZWN0ZWRBbGxEYXRlKGRhdGUpe1xuICAgIGxldCBpc0FsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgICAgICBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpc0FsbFNlbGVjdGVkO1xuICB9O1xuXG4gIHNlbGVjdEJ5RGF0ZShkYXRlKXtcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZGVzZWxlY3RCeURhdGUoZGF0ZSl7XG4gICAgdGhpcy5jb25maWcuZGF0YS5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5kZXNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgc2VsZWN0QnlJdGVtRGF0ZShkYXRlLCBpdGVtLCByZWRyYXcgPSB0cnVlLCByZWZyZXNoRm9ybSA9IHRydWUpe1xuICAgIGlmKCF0aGlzLmlzU2VsZWN0ZWQoZGF0ZSwgaXRlbSkpe1xuICAgICAgbGV0IHBvcyA9IHV0aWxzLmdldFBvc2l0aW9uQnlJdGVtRGF0ZSh0aGlzLmNvbmZpZywgaXRlbSwgZGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdChkYXRlLCBpdGVtLCBwb3MsIHJlZHJhdywgcmVmcmVzaEZvcm0pO1xuICAgIH1cbiAgfTtcblxuXG4gIGRlc2VsZWN0QnlJdGVtRGF0ZShkYXRlLCBpdGVtLCByZWRyYXcgPSB0cnVlKXtcbiAgICBpZih0aGlzLmlzU2VsZWN0ZWQoZGF0ZSwgaXRlbSkpe1xuICAgICAgdGhpcy5kZXNlbGVjdChkYXRlLCBpdGVtLCByZWRyYXcpO1xuICAgIH1cbiAgfTtcblxuICBkZXNlbGVjdEFsbChyZWRyYXcgPSBmYWxzZSl7XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICAgIGlmKHJlZHJhdyl7XG4gICAgICB0aGlzLnJlZHJhd1NlbGVjdGlvbigpO1xuICAgIH1cbiAgfTtcblxuXG5cblxuXG5cbiAgY2hlY2tDbGFzc1NpZGViYXJFeHRlbmRlZFJpZ2h0KCl7XG4gICAgY29uc3Qgc2hvd1NpZGViYXIgPSB0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDAgJiYgISh0aGlzLmlzTW9iaWxlICYmIHRoaXMubW9iaWxlU2VsZWN0YWJsZSk7XG4gICAgaWYoc2hvd1NpZGViYXIpe1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChcImV4dGVuZGVkLXJpZ2h0XCIpO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZShcImV4dGVuZGVkLXJpZ2h0XCIpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVNb2JpbGVGb290ZXJWaXNpYmlsaXR5KCl7XG4gICAgY29uc3QgJGZvb3RlciA9IHRoaXMuJGVsZW1lbnRzLiRtb2JpbGVGb290ZXI7XG4gICAgaWYoISRmb290ZXIpIHJldHVybjtcbiAgICBjb25zdCBzaG93Rm9vdGVyID0gdGhpcy5pc01vYmlsZSAmJiB0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlRGVza3RvcCAhPT0gZmFsc2U7XG4gICAgaWYoc2hvd0Zvb3RlcikgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChcImhhcy1tb2JpbGUtZm9vdGVyXCIpO1xuICAgIGVsc2UgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZShcImhhcy1tb2JpbGUtZm9vdGVyXCIpO1xuICB9O1xuXG4gIGhhbmRsZU1vYmlsZUZvb3RlckNsaWNrKGV2dCl7XG4gICAgaWYoZXZ0LnRhcmdldC5jbG9zZXN0KFwiLm1vYmlsZS1mb290ZXItY2FuY2VsXCIpKXtcbiAgICAgIHRoaXMuY2FuY2VsTXVsdGlJbnB1dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCAkYnRuID0gZXZ0LnRhcmdldC5jbG9zZXN0KFwiLm1vYmlsZS1mb290ZXItYnRuW2RhdGEtbW9iaWxlLWJ0bi1pZHhdXCIpO1xuICAgIGlmKCRidG4gJiYgISRidG4uZGlzYWJsZWQpe1xuICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludCgkYnRuLmdldEF0dHJpYnV0ZShcImRhdGEtbW9iaWxlLWJ0bi1pZHhcIiksIDEwKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSAodGhpcy5jb25maWcudGltZWxpbmUubW9iaWxlRm9vdGVyICYmIHRoaXMuY29uZmlnLnRpbWVsaW5lLm1vYmlsZUZvb3Rlci5idXR0b25zKSB8fCBbXTtcbiAgICAgIGNvbnN0IGJ0bkNvbmZpZyA9IGJ1dHRvbnNbaW5kZXhdO1xuICAgICAgaWYoYnRuQ29uZmlnICYmIHR5cGVvZiBidG5Db25maWcub25DbGljayA9PT0gXCJmdW5jdGlvblwiKXtcbiAgICAgICAgYnRuQ29uZmlnLm9uQ2xpY2soeyBldnQsIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cblxuXG4gIC8qKlxuICAgKiBvY3VsdGEgZGV0YWlsRGF5IGVuIGVsIGRvbSwgdXNhbmRvIGxhIGNsYXNlIGRkLWhpZGVcbiAgICovXG4gIGhpZGVEZXRhaWxEYXkoKXtcbiAgICB0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5LmNsYXNzTGlzdC5hZGQoXCJkZC1oaWRlXCIpO1xuICB9O1xuXG4gIGhpZGVDb250ZXh0TWVudSgpe1xuICAgIGlmKHRoaXMuJGVsZW1lbnRzLiRjb250ZXh0TWVudSl7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUuY2xhc3NMaXN0LmFkZChcImNtLWhpZGVcIik7XG4gICAgfVxuICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBmYWxzZTtcbiAgfTtcblxuXG4gIHJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKXtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxMZWZ0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLnNjcm9sbFRvcCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsVG9wO1xuXG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuc2Nyb2xsV2lkdGggPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbFdpZHRoO1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLnNjcm9sbEhlaWdodCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuYm91bmRpbmdDbGllbnRUYWJsZSA9IHRoaXMuJGVsZW1lbnRzLiR0YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5ib3VuZGluZ0NsaWVudENvbnRhaW5lciA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cblxuICByZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKXtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5jb250YWluZXJXaWR0aCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuY29udGFpbmVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMubmF2V2lkdGggPSB0aGlzLiRlbGVtZW50cy4kbmF2TGVmdC5jbGllbnRXaWR0aDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5oZWFkZXJIZWlnaHQgPSB0aGlzLiRlbGVtZW50cy4kaGVhZGVyLmNsaWVudEhlaWdodDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5kYXlXaWR0aCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1kYXktd2lkdGhcIikpO1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLml0ZW1IZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIikpO1xuICB9XG5cbiAgcmVmcmVzaFZpcnR1YWxTY3JvbGwoKXtcbiAgICBsZXQgJGZsb2F0Qm94TGlzdCA9IHRoaXMuJGVsZW1lbnRzLiRmbG9hdEJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsb2F0LWJveFwiKTtcbiAgICAkZmxvYXRCb3hMaXN0LmZvckVhY2goZiA9PntcbiAgICAgIGlmKHRoaXMuaXNWaXNpYmxlRmxvYXRCb3hFbGVtZW50KGYpKXtcbiAgICAgICAgZi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWlzLXZpc2libGVcIiwgdHJ1ZSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgZi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWlzLXZpc2libGVcIiwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBpc1Zpc2libGVGbG9hdEJveEVsZW1lbnQoZil7XG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID0gdXRpbHMudGFibGVQb3NpdGlvbnMuY29udGFpbmVyV2lkdGg7XG4gICAgbGV0IGNvbnRhaW5lckhlaWdodCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLmNvbnRhaW5lckhlaWdodDtcbiAgICBsZXQgbmF2V2lkdGggPSB1dGlscy50YWJsZVBvc2l0aW9ucy5uYXZXaWR0aDtcbiAgICBsZXQgaGVhZGVySGVpZ2h0ID0gdXRpbHMudGFibGVQb3NpdGlvbnMuaGVhZGVySGVpZ2h0O1xuICAgIGxldCBkYXlXaWR0aCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLmRheVdpZHRoO1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gdXRpbHMudGFibGVQb3NpdGlvbnMuaXRlbUhlaWdodDtcbiAgICBsZXQgc2Nyb2xsTGVmdCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLnNjcm9sbExlZnQ7XG4gICAgbGV0IHNjcm9sbFRvcCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLnNjcm9sbFRvcDtcblxuICAgIGxldCBtYXJnaW4gPSBkYXlXaWR0aDtcbiAgICBsZXQgbGVmdCA9IHBhcnNlRmxvYXQoZi5zdHlsZS5sZWZ0KTtcbiAgICBsZXQgdG9wID0gcGFyc2VGbG9hdChmLnN0eWxlLnRvcCk7XG5cbiAgICBsZXQgdmlzaWJsZVdpZHRoID0gY29udGFpbmVyV2lkdGggLSBuYXZXaWR0aCA7XG4gICAgbGV0IHZpc2libGVIZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBoZWFkZXJIZWlnaHQ7XG5cbiAgICBsZXQgaXNWaXNpYmxlTGVmdCA9ICBsZWZ0ID4gc2Nyb2xsTGVmdCAtIGRheVdpZHRoIC0gbWFyZ2luO1xuICAgIGxldCBpc1Zpc2libGVSaWdodCA9IGxlZnQgPCAoIHNjcm9sbExlZnQgKyB2aXNpYmxlV2lkdGggKyBkYXlXaWR0aCArIG1hcmdpbik7XG4gICAgbGV0IGlzVmlzaWJsZVRvcCA9IHRvcCA+IChzY3JvbGxUb3AgLSBpdGVtSGVpZ2h0IC0gbWFyZ2luKTtcbiAgICBsZXQgaXNWaXNpYmxlQm90dG9tID0gdG9wIDwgKHNjcm9sbFRvcCArIHZpc2libGVIZWlnaHQgKyBpdGVtSGVpZ2h0ICsgbWFyZ2luKTtcblxuICAgIHJldHVybiBpc1Zpc2libGVMZWZ0ICYmIGlzVmlzaWJsZVJpZ2h0ICYmIGlzVmlzaWJsZVRvcCAmJiBpc1Zpc2libGVCb3R0b207XG4gIH1cblxuXG4gIG9uU2Nyb2xsQ29udGFpbmVyKCl7XG4gICAgaWYoIXRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxEZWJvdW5jZWQpe1xuICAgICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbERlYm91bmNlZCA9IHV0aWxzLnRocm90dGxlKHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGwuYmluZCh0aGlzKSwgMTAwLCBcbiAgICAgICAge2xlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlfSk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxEZWJvdW5jZWQoKTtcbiAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBNdWVzdHJhIERldGFpbCBkaWFsb2cgeSBSZWZyZXNjYSBzdSBwb3NpY2lvbiBcbiAgICogdXNhbmRvIGVsIGV2ZW50byBkZWwgbW91c2VcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIGV2ZW50byBkZSBtb3VzZW1vdmUsIHBhcmEgcG9zaWNpb25lcyBlbiBwYW50YWxsYVxuICAgKi9cbiAgcmVmcmVzaERldGFpbERheVBvc2l0aW9uKHBvc2l0aW9uKXtcbiAgICBsZXQgZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICBsZXQgaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5LnN0eWxlLnRvcCAgPSBwb3NpdGlvbi50b3AgKyBcInB4XCI7XG4gICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5zdHlsZS5sZWZ0ID0gcG9zaXRpb24ubGVmdCArIGRheVdpZHRoICsgXCJweFwiO1xuXG4gICAgbGV0IHlQb3NpdGlvbkNsYXNzID0gXCJoYXMtdG9wLWFycm93XCI7XG4gICAgbGV0IHhQb3NpdGlvbkNsYXNzID0gXCJcIjtcblxuICAgIC8vY29uZGljaW9uIHBhcmEgcHJpbWVyYXMgMyBmaWxhc1xuICAgIGlmKHBvc2l0aW9uLnRvcENsaWVudCA8PSBpdGVtSGVpZ2h0ICozICl7XG4gICAgICB5UG9zaXRpb25DbGFzcyA9IFwiaGFzLWNlaWwtYXJyb3dcIjtcbiAgICB9ZWxzZSBpZiggcG9zaXRpb24ueVBlcmNlbnQgPiAyMCAmJlxuICAgICAgcG9zaXRpb24ueVBlcmNlbnQgPD0gNzApeyAvL2VudHJlIDIwIHkgNTAgJVxuICAgICAgeVBvc2l0aW9uQ2xhc3MgPSBcImhhcy1taWRkbGUtYXJyb3dcIjtcbiAgICB9ZWxzZSBpZihwb3NpdGlvbi55UGVyY2VudCA+IDcwKXtcbiAgICAgIHlQb3NpdGlvbkNsYXNzID0gXCJoYXMtYm90dG9tLWFycm93XCI7XG4gICAgfVxuXG4gICAgaWYocG9zaXRpb24ueFBlcmNlbnQgPiAzMCApe1xuICAgICAgeFBvc2l0aW9uQ2xhc3MgPSBcImhhcy1yaWdodC1hcnJvd1wiO1xuICAgIH1cblxuICAgIC8vcXVpdGEgZGQtaGlkZSwgc29icmVlc2NyaWJpZW5kbyB0b2RhcyBsYXMgY2xhc2VzXG4gICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5jbGFzc05hbWUgPSBcImRldGFpbC1kYXkgXCIrIHlQb3NpdGlvbkNsYXNzICsgXCIgXCIgKyB4UG9zaXRpb25DbGFzcztcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ2FwdHVyYSBldmVudG8gY2xpY2sgZW4gYm90b24gcGFyYSBhYnJpciBhcmJvbCwgZW4gc2lkZWJhciBpenF1aWVyZG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIG9iamV0byBldmVudG8gY2xpY2tcbiAgICovXG4gIGNsaWNrTmF2TGVmdFRyZWVJY29uKCl7XG4gICAgdGhpcy5yZWRyYXcoe1xuICAgICAgZmxvYXRCb3g6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmFycygpO1xuICB9XG5cblxuICBjbGlja0Zsb2F0Qm94KGV2dCl7XG4gICAgaWYodGhpcy5pc01vYmlsZSl7XG4gICAgICB0aGlzLm1vdXNlT3ZlckZsb2F0Qm94KGV2dCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZXZlbnRvIG1vdXNlb3ZlciBzb2JyZSBlbGVtZW50byBmbG9hdEJveFxuICAgKiB1c2FkYSBwYXJhIG1vc3RyYXIgZGV0YWxsZSBkZSBkaWEvaXRlbSBkZWwgZmxvYXRib3hcbiAgICovXG4gIG1vdXNlT3ZlckZsb2F0Qm94KGV2dCwgZm9yY2Upe1xuICAgICAgbGV0IGl0ZW0gICAgPSBldnQuZGV0YWlsLml0ZW07XG4gICAgICBsZXQgZGF0YURheSA9IGV2dC5kZXRhaWwuZGF0YTtcblxuICAgICAgLy92ZXJpZmljYSBxdWUgc2VhbiBkaWFzIGRpc3RpbnRvcywgY29tcGFyYW5kb2xvIGNvbiBlbCBhbnRlcmlvcixcbiAgICAgIC8vIHBhcmEgbm8gY3JlYXIgbnVldmFtZW50ZSBlbCBtaXNtbyBkZXRhaWwtZGF5LCBjb24gbG9zIG1pc21vcyBkYXRvc1xuICAgICAgaWYoZGF0YURheSAhPT0gdGhpcy5sYXN0RGF0YURheSB8fCBmb3JjZSl7XG4gICAgICAgIGxldCBuZXdERENvbnRlbnRTdHJpbmcgPSB0YWJsZUVsZW1lbnRzLnJlZHJhd0RldGFpbERheSh0aGlzLmNvbmZpZywgaXRlbSwgZGF0YURheSwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgICAgIGlmKG5ld0REQ29udGVudFN0cmluZyl7XG4gICAgICAgICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5pbm5lckhUTUwgPSBuZXdERENvbnRlbnRTdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0RGF0YURheSA9IGRhdGFEYXk7XG4gICAgICB9XG4gIH1cblxuICBjbGlja0RhdGVIZWFkZXIoZXZ0KXtcbiAgICBsZXQgZGF0ZSA9IGV2dC5kZXRhaWwuZGF0ZTtcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdEJ5RGF0ZShkYXRlKTtcbiAgICB0aGlzLnJlZHJhd1NlbGVjdGlvbigpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QnlEYXRlKGRhdGUpe1xuICAgIGlmKHRoaXMuaXNTZWxlY3RlZEFsbERhdGUoZGF0ZSkpe1xuICAgICAgdGhpcy5kZXNlbGVjdEJ5RGF0ZShkYXRlKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuc2VsZWN0QnlEYXRlKGRhdGUpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZC5zb3J0KChzLCBuKSA9PiB7XG4gICAgICByZXR1cm4gKG5ldyBEYXRlKHMuZGF0ZSkpIC0gKG5ldyBEYXRlKG4uZGF0ZSkpO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0SW5kZXhUb1NlbGVjdGVkKCk7XG4gIH1cblxuXG4gIGNvbnRleHRNZW51RGF0ZUhlYWRlcihldnQpe1xuICAgIGxldCBsZWZ0ID0gZXZ0LmRldGFpbC5jbGllbnRYO1xuICAgIGxldCB0b3AgPSBldnQuZGV0YWlsLmNsaWVudFkgLSB0aGlzLiRjYXBpYmFyYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgbGV0IGRhdGUgPSBldnQuZGV0YWlsLmRhdGU7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZ0LmRldGFpbC4kZWxlbTtcblxuICAgIGxldCB7IGVsZW06JGVsZW0sIGlzVmlzaWJsZSB9ID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb250ZXh0TWVudSh7XG4gICAgICB0YWJTZWxlY3RlZDogdGhpcy50YWJTZWxlY3RlZCxcbiAgICAgIHRhcmdldCxcbiAgICAgICRjYXBpYmFyYUVsZW06IHRoaXMuJGNhcGliYXJhLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgZGF0ZSxcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICBuYW1lOiBcIm9uRGF0ZUhlYWRlclwiXG4gICAgfSk7XG5cbiAgICBpZigkZWxlbSl7XG4gICAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ID0gaXNWaXNpYmxlO1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51LnJlcGxhY2VXaXRoKCRlbGVtKTtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb250ZXh0TWVudSA9ICRlbGVtO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZXZlbnRvIHdpbmRvdyByZXNpemVcbiAgICogcGFyYSB2ZXJpZmljYXIgc2kgZXMgbW9iaWxlIG8gbm9cbiAgICovXG4gIG9uV2luZG93UmVzaXplKCl7XG4gICAgaWYodGhpcy5pbml0aWFsaXplZCl7XG4gICAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLmlzTW9iaWxlO1xuICAgICAgbGV0IG5ld1ZhbHVlID0gdXRpbHMuY2hlY2tJc01vYmlsZSh0aGlzLmNvbmZpZyk7XG4gICAgICBpZihvbGRWYWx1ZSAhPSBuZXdWYWx1ZSApe1xuICAgICAgICB0aGlzLmlzTW9iaWxlID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMudG9nZ2xlU2lkZWJhck1vYmlsZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1vYmlsZUZvb3RlclZpc2liaWxpdHkoKTtcbiAgICAgICAgdGhpcy5zZXRBbGxDU1NWYXJpYWJsZXMoKTtcbiAgICAgICAgdGhpcy5yZWRyYXcoeyBmbG9hdEJveDp0cnVlLCBuYXZMZWZ0OnRydWUsIGhlYWRlcjp0cnVlIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmFycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYW1iaWEgc2lkZWJhciBwYXJhIG1vYmlsZSwgc2VndW4gdmFyaWFibGUgdGhpcy5pc01vYmlsZVxuICAgKi9cbiAgdG9nZ2xlU2lkZWJhck1vYmlsZSgpe1xuICAgICAgaWYodGhpcy5pc01vYmlsZSl7XG4gICAgICAgIHRoaXMuc2V0U2hvd05hdkluaXRpYWwoZmFsc2UpO1xuICAgICAgICB0aGlzLnNldFNob3dOYXZFeHRlbmRlZChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0U2hvd05hdkJ1dHRvbnMoZmFsc2UpO1xuICAgICAgICB0aGlzLnNldEVkaXRhYmxlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RhYmxlKHRoaXMubW9iaWxlU2VsZWN0YWJsZSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2SW5pdGlhbCh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2RXh0ZW5kZWQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNldFNob3dOYXZCdXR0b25zKHRydWUpO1xuICAgICAgICB0aGlzLnNldEVkaXRhYmxlKHRydWUpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGFibGUodGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZURlc2t0b3AgIT09IGZhbHNlKTtcbiAgICAgIH1cbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmFycygpO1xuICB9XG5cbiAgc2V0RWRpdGFibGUobmV3RWRpdGFibGUpe1xuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLmVkaXRhYmxlICE9IG5ld0VkaXRhYmxlKXtcbiAgICAgIHRoaXMuY29uZmlnLnRpbWVsaW5lLmVkaXRhYmxlID0gbmV3RWRpdGFibGU7XG4gICAgICB0aGlzLnJlZHJhdyh7bmF2TGVmdDp0cnVlLCBoZWFkZXI6dHJ1ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdGFibGUobmV3U2VsZWN0YWJsZSl7XG4gICAgaWYodGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZSAhPSBuZXdTZWxlY3RhYmxlKXtcbiAgICAgIHRoaXMuY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGUgPSBuZXdTZWxlY3RhYmxlO1xuICAgICAgdGhpcy5jbGVhbk11bHRpSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVNb2JpbGVTZWxlY3QoKXtcbiAgICB0aGlzLm1vYmlsZVNlbGVjdGFibGUgPSAhdGhpcy5tb2JpbGVTZWxlY3RhYmxlO1xuICAgIHRoaXMuY29uZmlnLnRpbWVsaW5lLm1vYmlsZVNlbGVjdGFibGUgPSB0aGlzLm1vYmlsZVNlbGVjdGFibGU7XG4gICAgaWYodGhpcy5pc01vYmlsZSl7XG4gICAgICB0aGlzLnNldFNlbGVjdGFibGUodGhpcy5tb2JpbGVTZWxlY3RhYmxlKTtcbiAgICB9XG4gICAgaWYodGhpcy5tb2JpbGVTZWxlY3RhYmxlICYmIHRoaXMubGFzdEZvY3VzZWREYXkpe1xuICAgICAgY29uc3QgeyBkYXRlLCBpdGVtLCBwb3MgfSA9IHRoaXMubGFzdEZvY3VzZWREYXk7XG4gICAgICBjb25zdCBkYXRhQnlEYXRlID0gaXRlbSAmJiBpdGVtLmRhdGEgPyBfLmZpbmQoaXRlbS5kYXRhLCB7IGRhdGUgfSkgOiBudWxsO1xuICAgICAgaWYodGhpcy5pc1NlbGVjdGFibGUoeyBpdGVtLCBkYXRlLCBkYXRhQnlEYXRlIH0pKXtcbiAgICAgICAgdGhpcy50b2dnbGVTZWxlY3QoZGF0ZSwgaXRlbSwgcG9zKTtcbiAgICAgICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy51cGRhdGVNb2JpbGVGb290ZXJCdXR0b25zVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNlbGVjdERheVwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICAgICAgICBsYXN0U2VsZWN0aW9uOiB7IGRhdGUsIGl0ZW0sIHBvcyB9LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgICAgICB0YWJTZWxlY3RlZDogdGhpcy50YWJTZWxlY3RlZFxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0Rm9jdXNlZERheSA9IG51bGw7XG4gICAgfSBlbHNlIGlmKCF0aGlzLm1vYmlsZVNlbGVjdGFibGUpe1xuICAgICAgdGhpcy5sYXN0Rm9jdXNlZERheSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTW9iaWxlU2VsZWN0QnV0dG9uKCk7XG4gICAgdGhpcy5jaGVja0NsYXNzU2lkZWJhckV4dGVuZGVkUmlnaHQoKTtcbiAgICB0aGlzLnVwZGF0ZU1vYmlsZUZvb3RlclZpc2liaWxpdHkoKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcIm1vYmlsZVNlbGVjdFRvZ2dsZWRcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOiB7IG1vYmlsZVNlbGVjdGFibGU6IHRoaXMubW9iaWxlU2VsZWN0YWJsZSB9XG4gICAgfSkpO1xuICB9XG5cbiAgdXBkYXRlTW9iaWxlU2VsZWN0QnV0dG9uKCl7XG4gICAgbGV0ICRidG4gPSB0aGlzLiRjYXBpYmFyYSAmJiB0aGlzLiRjYXBpYmFyYS5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1tb2JpbGUtc2VsZWN0XVwiKTtcbiAgICBpZighJGJ0bikgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMubW9iaWxlU2VsZWN0YWJsZTtcbiAgICBjb25zdCBsYWJlbCA9IGFjdGl2ZSA/IFwiRGVzYWN0aXZhciBzZWxlY2Npw7NuXCIgOiBcIkFjdGl2YXIgc2VsZWNjacOzbiBkZSBkw61hc1wiO1xuICAgIGNvbnN0IGxhYmVsU3R5bGUgPSBhY3RpdmUgPyBcImRpc3BsYXk6bm9uZVwiIDogXCJcIjtcbiAgICBjb25zdCBjb3VudFN0eWxlID0gYWN0aXZlID8gXCJcIiA6IFwiZGlzcGxheTpub25lXCI7XG4gICAgJGJ0bi5pbm5lckhUTUwgPSB0aGlzLmdldENoZWNrYm94SWNvbkh0bWwoYWN0aXZlKVxuICAgICAgKyAnPHNwYW4gY2xhc3M9XCJtb2JpbGUtZm9vdGVyLXNlbGVjdC1sYWJlbFwiIHN0eWxlPVwiJyArIGxhYmVsU3R5bGUgKyAnXCI+U2VsZWNjaW9uYXIgZMOtYXM8L3NwYW4+J1xuICAgICAgKyAnPHNwYW4gY2xhc3M9XCJtb2JpbGUtZm9vdGVyLXNlbGVjdC1jb3VudFwiIHN0eWxlPVwiJyArIGNvdW50U3R5bGUgKyAnXCI+PC9zcGFuPic7XG4gICAgJGJ0bi5jbGFzc0xpc3QudG9nZ2xlKFwiYWN0aXZlXCIsIGFjdGl2ZSk7XG4gICAgJGJ0bi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWNoZWNrZWRcIiwgYWN0aXZlKTtcbiAgICAkYnRuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICAgICRidG4uc2V0QXR0cmlidXRlKFwiY2FwLXRvb2x0aXBcIiwgbGFiZWwpO1xuICAgIHRoaXMudXBkYXRlTW9iaWxlRm9vdGVyQnV0dG9uc1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIHVwZGF0ZU1vYmlsZUZvb3RlckJ1dHRvbnNWaXNpYmlsaXR5KCl7XG4gICAgY29uc3QgJGZvb3RlciA9IHRoaXMuJGVsZW1lbnRzLiRtb2JpbGVGb290ZXI7XG4gICAgaWYoISRmb290ZXIpIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3RNb2RlID0gdGhpcy5tb2JpbGVTZWxlY3RhYmxlO1xuICAgIGNvbnN0IGhhc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwO1xuICAgIGNvbnN0ICRjb3VudCA9ICRmb290ZXIucXVlcnlTZWxlY3RvcihcIi5tb2JpbGUtZm9vdGVyLXNlbGVjdC1jb3VudFwiKTtcbiAgICBpZigkY291bnQpICRjb3VudC50ZXh0Q29udGVudCA9IHRoaXMuc2VsZWN0ZWQubGVuZ3RoICsgXCIgZMOtYXNcIjtcbiAgICAkZm9vdGVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1zaG93LXdoZW5dXCIpLmZvckVhY2goKCRlbCkgPT4ge1xuICAgICAgY29uc3Qgc2hvd1doZW4gPSAkZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1zaG93LXdoZW5cIik7XG4gICAgICBsZXQgdmlzaWJsZSA9IHNob3dXaGVuID09PSBcImFsd2F5c1wiIHx8XG4gICAgICAgIChzaG93V2hlbiA9PT0gXCJzZWxlY3RcIiAmJiBzZWxlY3RNb2RlKSB8fFxuICAgICAgICAoc2hvd1doZW4gPT09IFwiZGV0YWlsXCIgJiYgIXNlbGVjdE1vZGUpO1xuICAgICAgaWYoJGVsLmNsYXNzTGlzdC5jb250YWlucyhcIm1vYmlsZS1mb290ZXItY2FuY2VsXCIpKXtcbiAgICAgICAgdmlzaWJsZSA9IHZpc2libGUgJiYgaGFzU2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICAkZWwuY2xhc3NMaXN0LnRvZ2dsZShcIm1vYmlsZS1mb290ZXItYnRuLWhpZGRlblwiLCAhdmlzaWJsZSk7XG4gICAgICBjb25zdCBkaXNhYmxlZFdoZW5Ob1NlbGVjdGlvbiA9ICRlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWRpc2FibGVkLXdoZW4tbm8tc2VsZWN0aW9uXCIpID09PSBcInRydWVcIjtcbiAgICAgIGNvbnN0IGRpc2FibGVkID0gZGlzYWJsZWRXaGVuTm9TZWxlY3Rpb24gJiYgc2VsZWN0TW9kZSAmJiAhaGFzU2VsZWN0ZWQ7XG4gICAgICAkZWwuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENoZWNrYm94SWNvbkh0bWwoY2hlY2tlZCl7XG4gICAgaWYoaWNvbnMuZ2V0Q2hlY2tib3hJY29uKSByZXR1cm4gaWNvbnMuZ2V0Q2hlY2tib3hJY29uKGNoZWNrZWQpO1xuICAgIGNvbnN0IHBhdGggPSBjaGVja2VkXG4gICAgICA/IFwiTTEwLDE3TDUsMTJMNi40MSwxMC41OEwxMCwxNC4xN0wxNy41OSw2LjU4TDE5LDhNMTksM0g1QzMuODksMyAzLDMuODkgMyw1VjE5QTIsMiAwIDAsMCA1LDIxSDE5QTIsMiAwIDAsMCAyMSwxOVY1QzIxLDMuODkgMjAuMSwzIDE5LDNaXCJcbiAgICAgIDogXCJNMTksM0g1QTIsMiAwIDAsMCAzLDVWMTlBMiwyIDAgMCwwIDUsMjFIMTlBMiwyIDAgMCwwIDIxLDE5VjVBMiwyIDAgMCwwIDE5LDNNMTksNVYxOUg1VjVIMTlaXCI7XG4gICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImNoZWNrYm94LWljb25cIj48c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIicgKyBwYXRoICsgJ1wiLz48L3N2Zz48L3NwYW4+JztcbiAgfVxuXG4gIGZvY3VzT25GbG9hdEJveCh7cG9zLCBldnR9KXtcbiAgICBpZih0aGlzLmlzTW9iaWxlKXtcbiAgICAgIGxldCBjb250YWluZXJXaWR0aCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICBsZXQgZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICAgIGxldCBuYXZXaWR0aCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1uYXYtd2lkdGhcIikpO1xuICAgICAgbGV0IGxlZnQgPSBwb3MubGVmdCAtIGNvbnRhaW5lcldpZHRoICsgMS41ICogZGF5V2lkdGggKyBuYXZXaWR0aDtcblxuICAgICAgLy9sZXQgY29udGFpbmVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICBsZXQgaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG4gICAgICAvL2xldCBoZWFkZXJIZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0taGVhZGVyLWhlaWdodFwiKSk7XG4gICAgICBsZXQgdG9wID0gcG9zLnRvcCAtIDAuNSAqIGl0ZW1IZWlnaHQ7XG5cbiAgICAgIGxldCBwb3NpdGlvbiA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbih0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgICAgdGhpcy5yZWZyZXNoRGV0YWlsRGF5UG9zaXRpb24oe1xuICAgICAgICAuLi5wb3NpdGlvbixcbiAgICAgICAgdG9wQ2xpZW50IDogcG9zaXRpb24ueUlubmVyUGVyY2VudCA+PSA3MCA/IHBvc2l0aW9uLnRvcENsaWVudCA6IDAsIC8vIGZ1ZXJ6YSBwb3NpY2lvbiBkZSBhcnJvdyBlbiBkZXRhaWxkYXlcbiAgICAgICAgeFBlcmNlbnQgIDogcG9zaXRpb24ueCA8IDQgPyAwOiAxMDAgIC8vIGZ1ZXJ6YSBhcnJvdyByaWdodFxuICAgICAgfSk7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbCh7XG4gICAgICAgIHRvcCwgbGVmdCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkKHtkZXRhaWx9KXtcbiAgICBpZih0aGlzLmlzTW9iaWxlICYmIHRoaXMubW9iaWxlU2VsZWN0YWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuJGlucHV0c1dpdGhSZWxvYWQgPSB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkLm1hcCgoeyAkaW5wdXQsIGNvbmZpZ30pID0+IHtcbiAgICAgIGxldCBsYXN0U2VsZWN0aW9uID0gZGV0YWlsICYmIGRldGFpbC5sYXN0U2VsZWN0aW9uID8gZGV0YWlsLmxhc3RTZWxlY3Rpb24gOiBudWxsO1xuICAgICAgbGV0IG5ld0lucHV0ID0gdGFibGVFbGVtZW50cy5jcmVhdGVJbnB1dChjb25maWcsIG51bGwsIGxhc3RTZWxlY3Rpb24sIGRldGFpbC5zZWxlY3RlZCk7XG4gICAgICAkaW5wdXQucGFyZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQobmV3SW5wdXQsICRpbnB1dCk7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLiRpbnB1dHNOYXZSaWdodC5pbmRleE9mKCRpbnB1dCk7XG4gICAgICBpZihpbmRleCA+PSAwKXtcbiAgICAgICAgdGhpcy4kaW5wdXRzTmF2UmlnaHRbaW5kZXhdID0gbmV3SW5wdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyRpbnB1dDogbmV3SW5wdXQsIGNvbmZpZ31cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQWdyZWdhIGV2ZW50b3MgYSBsb3MgZWxlbWVudG9zIGRlbCBkb20gZGUgbGEgcGxhbmlsbGFcbiAgICogdXNhbmRvIGVsIG9iamVjdG8gJGNhcGliYXJhXG4gICAqL1xuICBhZGRFdmVudHMoKXtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiAgICAgICAgICAgICAgICAsIHRoaXMuaGlkZUNvbnRleHRNZW51LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiICAgICAgICAgICwgdGhpcy5yaWdodENsaWNrT25DYXBpYmFyYS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlRGFya1wiICAgICAgICAgICAsIHRoaXMudG9nZ2xlRGFyay5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlSGVhZGVyXCIgICAgICAgICAsIHRoaXMudG9nZ2xlSGVhZGVyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b2dnbGVNb2JpbGVTZWxlY3RcIiAgICwgdGhpcy50b2dnbGVNb2JpbGVTZWxlY3QuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInRvZ2dsZVNpZGViYXJcIiAgICAgICAgLCB0aGlzLnRvZ2dsZVNpZGViYXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInRvZ2dsZVNpZGViYXJSaWdodFwiICAgLCB0aGlzLnRvZ2dsZVNpZGViYXJSaWdodC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2F2ZU11bHRpSW5wdXRcIiAgICAgICAsIHRoaXMuc2F2ZUlucHV0c05hdlJpZ2h0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJjYW5jZWxNdWx0aUlucHV0XCIgICAgICwgdGhpcy5jYW5jZWxNdWx0aUlucHV0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJvdmVyTmF2SXRlbVwiICAgICAgICAgICwgdGhpcy5vdmVyTmF2SXRlbS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwibGVhdmVOYXZJdGVtXCIgICAgICAgICAsIHRoaXMubGVhdmVOYXZJdGVtLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja05hdkxlZnRUcmVlSWNvblwiICwgdGhpcy5jbGlja05hdkxlZnRUcmVlSWNvbi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VPdmVyRmxvYXRCb3hcIiAgICAsIHRoaXMubW91c2VPdmVyRmxvYXRCb3guYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrRmxvYXRCb3hcIiAgICAsIHRoaXMuY2xpY2tGbG9hdEJveC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0VGFiSGVhZGVyXCIgICAgICAsIGUgPT4geyB0aGlzLnNlbGVjdFRhYihlLmRldGFpbC50YWIpOyB9KTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0TGVnZW5kSGVhZGVyXCIgICAsIHRoaXMuc2VsZWN0TGVnZW5kLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdERheVwiICAgLCB0aGlzLnJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJkZXNlbGVjdERheVwiICAgLCB0aGlzLnJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5tb3VzZU1vdmVPbkZsZXhCb3hDb250YWluZXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIHRoaXMubW91c2VMZWF2ZU9uRmxvYXRCb3hDb250YWluZXIuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50cy4kdGFibGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm1vdXNlTW92ZU9uVGFibGUuYmluZCh0aGlzKSApO1xuICAgIHRoaXMuJGVsZW1lbnRzLiR0YWJsZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja09uVGFibGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kZWxlbWVudHMuJHRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLnJpZ2h0Q2xpY2tPblRhYmxlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25TY3JvbGxDb250YWluZXIuYmluZCh0aGlzKSk7XG5cbiAgICBpZih0aGlzLiRlbGVtZW50cy4kbW9iaWxlRm9vdGVyKXtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRtb2JpbGVGb290ZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGFuZGxlTW9iaWxlRm9vdGVyQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tEYXRlXCIsIHRoaXMuY2xpY2tEYXRlSGVhZGVyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRNZW51RGF0ZVwiLCB0aGlzLmNvbnRleHRNZW51RGF0ZUhlYWRlci5iaW5kKHRoaXMpKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLHRoaXMub25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlLmJpbmQodGhpcykpO1xuICB9XG5cblxuXG5cbiAgLyoqXG4gICAqIEZ1bmNpb24gcGFyYSByZWRpYnVqYXIgcGFydGVzIGRlIGxhIHBsYW5pbGxhLCBpbmRpY2FkbyBzZWd1biBwYXJhbWV0cm9cbiAgICpcbiAgICogICAgb3B0aW9ucyA6IHtcbiAgICogICAgICAgICAgICBmbG9hdEJveDogQm9vbGVhbixcbiAgICogICAgICAgICAgICBwbG90czogQm9vbGVhbixcbiAgICogICAgICAgICAgICBoZWFkZXI6IEJvb2xlYW4sXG4gICAqICAgICAgICAgICAgbmF2TGVmdDogQm9vbGVhbixcbiAgICogICAgICAgICAgICBuYXZSaWdodDogQm9vbGVhbixcbiAgICogICAgfVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9iamVjdG8gZGUgY29uZmlndXJhY2lvblxuICAgKi9cbiAgcmVkcmF3KG9wdGlvbnMpe1xuXG4gICAgaWYob3B0aW9ucy5mbG9hdEJveCl7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd0Zsb2F0Qm94KHRoaXMuY29uZmlnLCB0aGlzLnRhYlNlbGVjdGVkLCB0aGlzLiRlbGVtZW50cy4kZmxvYXRCb3hDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdCYWNrZ3JvdW5kKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kYmFja2dyb3VuZCk7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd1Bsb3RWZXJ0aWNhbENvbnRhaW5lcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJHBsb3RWZXJ0aWNhbENvbnRhaW5lcik7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd1Bsb3RIb3Jpem9udGFsQ29udGFpbmVyKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kcGxvdEhvcml6b250YWxDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdUb2RheUxpbmUodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiR0b2RheUxpbmUpO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMucGxvdHMpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90VmVydGljYWxDb250YWluZXIodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRwbG90VmVydGljYWxDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJHBsb3RIb3Jpem9udGFsQ29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmhlYWRlcil7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd0hlYWRlcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJGhlYWRlcik7XG4gICAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmVuYWJsZWQgIT09IGZhbHNlKXtcbiAgICAgICAgbGV0ICRoZWFkZXJFeHRlbmRlZCA9IHRhYmxlRWxlbWVudHMuY3JlYXRlSGVhZGVyRXh0ZW5kZWQodGhpcy5jb25maWcpO1xuICAgICAgICBpZigkaGVhZGVyRXh0ZW5kZWQpe1xuICAgICAgICAgIHRoaXMuJGVsZW1lbnRzLiRoZWFkZXIuYXBwZW5kKCRoZWFkZXJFeHRlbmRlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmhlYWRlclRvcCl7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kaGVhZGVyVG9wID0gdGFibGVFbGVtZW50cy5yZWRyYXdIZWFkZXJUb3AodGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQsIHRoaXMuJGVsZW1lbnRzLiRoZWFkZXJUb3ApO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuZGV0YWlsRGF5KXtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgICAgdGhpcy5sYXN0RGF0YURheSA9IG51bGw7XG4gICAgICB0aGlzLmxhc3RGb2N1c2VkRGF5ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLm5hdkxlZnQpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdOYXZMZWZ0KHRoaXMuJGVsZW1lbnRzLiRuYXZMZWZ0LCB0aGlzLmNvbmZpZywgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgICBzdHlsZVV0aWxzLnNldE5hdlN0eWxlKHRoaXMuY29uZmlnKTtcbiAgICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEluaXRpYWxTdHlsZSh0aGlzLmNvbmZpZywgdGhpcy5pc1Nob3dOYXZJbml0aWFsLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEV4dGVuZGVkU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuY29ybmVyTGVmdCl7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd0Nvcm5lcih0aGlzLiRlbGVtZW50cy4kY29ybmVyLCB0aGlzLmNvbmZpZywgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5jb3JuZXJSaWdodCl7XG4gICAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb3JuZXJSaWdodCA9IHRhYmxlRWxlbWVudHMucmVkcmF3Q29ybmVyUmlnaHQodGhpcy4kZWxlbWVudHMuJGNvcm5lclJpZ2h0LCB0aGlzLmNvbmZpZywgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5uYXZSaWdodCl7XG4gICAgICBsZXQgZGF0YURheSA9IG51bGw7XG4gICAgICBsZXQgZGF5U2VsZWN0ZWQgPSBudWxsO1xuXG4gICAgICBpZih0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApe1xuICAgICAgICBkYXlTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRbMF1cbiAgICAgICAgaWYoZGF5U2VsZWN0ZWQuaXRlbS5kYXRhKXtcbiAgICAgICAgICBkYXRhRGF5ID0gZGF5U2VsZWN0ZWQuaXRlbS5kYXRhLmZpbmQoZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZC5kYXRlID09IGRheVNlbGVjdGVkLmRhdGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHtpbnB1dHMsIGVsZW1lbnQsIGlucHV0c1dpdGhSZWxvYWQsIHNhdmVDYW5jZWxCdG5zfSA9IHRhYmxlRWxlbWVudHMucmVkcmF3TmF2UmlnaHQodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRuYXZSaWdodCwgdGhpcy5zZWxlY3RlZCAsIHRoaXMudGFiU2VsZWN0ZWQsIGRhdGFEYXksIHRoaXMuc2VsZWN0ZWRbMF0pO1xuICAgICAgdGhpcy4kZWxlbWVudHMuJG5hdlJpZ2h0ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgICA9IGlucHV0cztcbiAgICAgIHRoaXMuJGlucHV0c1dpdGhSZWxvYWQgPSBpbnB1dHNXaXRoUmVsb2FkO1xuICAgICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgPSBzYXZlQ2FuY2VsQnRucztcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmFycygpO1xuXG4gIH1cblxuXG4gIC8qKlxuICAgKiBNdWV2ZSBlbCBTY3JvbGwgZGUgbGEgcGxhbmlsbGEgYWwgaW5pY2lvXG4gICAqL1xuICBzY3JvbGxUb1N0YXJ0KCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWV2ZSBlbCBTY3JvbGwgZGUgbGEgcGxhbmlsbGEgYWwgaW5pY2lvXG4gICAqL1xuICBzY3JvbGxUb0VuZCgpe1xuICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsTGVmdCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsV2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogTXVldmUgZWwgU2Nyb2xsIGRlIGxhIHBsYW5pbGxhIGEgbGEgdGVyY2VyYSBwYXJ0ZVxuICAgKiBUT0RPIG1lam9yYXIgbG9naWNhIGRlIGVzdGEgZnVuY2lvblxuICAgKi9cbiAgc2Nyb2xsVG9NaWRkbGUoKXtcbiAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbExlZnQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbFdpZHRoIC8gMztcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmlqYSBsYXMgdmFyaWFibGVzIGRlIENTcyBzZWd1biBDb25maWdcbiAgICovXG4gIHNldEFsbENTU1ZhcmlhYmxlcygpe1xuICAgIGxldCBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICAvL3N0eWxlVXRpbHMuY2xlYW5TdHlsZShjb25maWcpO1xuICAgIHN0eWxlVXRpbHMuc2V0SGVhZGVyU3R5bGUoY29uZmlnKTtcbiAgICBzdHlsZVV0aWxzLnNldE5hdlN0eWxlKGNvbmZpZyk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0SW5pdGlhbFN0eWxlKGNvbmZpZywgdGhpcy5pc1Nob3dOYXZJbml0aWFsLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRFeHRlbmRlZFN0eWxlKGNvbmZpZywgdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0QnV0dG9uc1N0eWxlKGNvbmZpZywgdGhpcy5pc1Nob3dOYXZCdXR0b25zLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICBzdHlsZVV0aWxzLnNldFRhYmxlU3R5bGUoY29uZmlnKTtcbiAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWxCQTtBQXFCQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBM0dBO0FBQ0E7QUE0R0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQUhBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFIQTtBQVdBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFKQTtBQUhBO0FBVUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRxREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/capibara.js\n");
|
|
188
188
|
|
|
189
189
|
/***/ }),
|
|
190
190
|
|
|
@@ -255,7 +255,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti
|
|
|
255
255
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
256
256
|
|
|
257
257
|
"use strict";
|
|
258
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/dateUtils */ \"./src/util/dateUtils.js\");\n/* harmony import */ var _util_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/icons */ \"./src/util/icons.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Crea elemento Table\n * Contendrá los elementos que apareceran dentro de la tabla de planilla\n * Se Usa para :\n * - Agregar background con patron estilo tabla\n * - Agregar dayMouseOver, div que indica posicion de mouse\n * - Agregar DetailDay, para detalles de datos en tabla\n * - Agregar SelectedContainer, para dias seleccionados\n * - Agregar FloatBoxContainer, para visualizacion de datos en tabla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom creado\n */\n createAgTable(config) {\n let e = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"capibara\"\n });\n\n if (config.timeline.dark) {\n e.classList.add(\"dark-theme\");\n }\n\n if (config.timeline.header.extend.isShow) {\n e.classList.add(\"header-extended\");\n }\n\n if (config.timeline && config.timeline.forceMobile === true) {\n e.classList.add(\"force-mobile\");\n }\n\n return e;\n },\n\n /**\n * Recrea Background, que es el fondo grid, como tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento relacionado, donde se cre el background\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawBackground(config, $elem) {\n return this.createBackground(config, $elem);\n },\n\n /**\n * Crea y posiciona fondo de tabla\n * Este fondo contiene un patron de CSS que le da la apariencia de tabla\n * por lo cual se debe reposicionar segun la fecha de inicio, para hacer\n * calzar los fines de semana\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem = null] - Elemento background, si es null, lo crea\n * @return {Object} elemento Dom Background\n */\n createBackground(config, $elem = null) {\n let {\n height,\n width,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let start = new Date(config.timeline.start);\n let end = new Date(config.timeline.end);\n end.setTime(end.getTime() + _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].dayInMilliseconds); // add 24 hours\n\n let dCorrected = new Date(start.valueOf() + start.getTimezoneOffset() * 60000);\n let weekDay = dCorrected.getDay();\n let diffWeekDays = (weekDay - 1) * dayWidth * -1;\n $elem = $elem || _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"background-grid\"\n });\n $elem.style[\"background-position\"] = diffWeekDays + \"px 0, 0 0, \" + diffWeekDays + \"px 0\";\n $elem.style.width = width + \"px\";\n $elem.style.height = height + 1 + \"px\";\n return $elem;\n },\n\n /**\n * Crea Plot Container Vertical\n * Los plots son elementos que agregan secciones de fondo en la planilla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n createPlotVerticalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-vertical-container\"\n });\n return this.redrawPlotVerticalContainer(config, $elem);\n },\n\n createPlotHorizontalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-horizontal-container\"\n });\n return this.redrawPlotHorizontalContainer(config, $elem);\n },\n\n /**\n * Recrea plotVerticalContainer, usando elemento existente\n * usa un elemento existente para usar la funcion para redibujar el elemento\n *\n * Los Plots se insertan como divs, con posicion especificada,\n * con ancho de dia\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea plotVerticalContainer\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n redrawPlotVerticalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.vertical) {\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.vertical.forEach(p => {\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, p.date));\n let left = diffDays * dayWidth;\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-vertical\", p.className || \"\"],\n style: {\n \"margin-left\": left + \"px\",\n height: height + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n redrawPlotHorizontalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.horizontal) {\n let {\n width,\n itemHeight\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.horizontal.forEach(p => {\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, p.idNode, p.typeNode);\n let topPosition = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item, \"parent\");\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-horizontal\", p.className || \"\"],\n style: {\n \"margin-top\": topPosition * itemHeight + \"px\",\n width: width + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Izquierdo\n * Se usa para :\n * - titulos relacionados con los datos del sidebar izquierdo\n * - titulos para inputs de header, absolute a la derecha\n * - boton para mostrar/ocultar sidebar izquierdo\n * - promedios\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner\n */\n createCorner(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"corner\"\n });\n return this.redrawCorner($elem, config, tab);\n },\n\n redrawCorner($elem, config, tab = null) {\n let labelsInitialCorner = config.timeline.nav.left.initial.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsExtendCorner = config.timeline.nav.left.extend.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsHeaderExtend = config.timeline.header.extend.data.map(d => {\n if (d.isHidden) return \"\";\n let avg = \"\";\n let tooltip = \"\";\n let className = \"\";\n let isAccent = d.isAccent;\n\n if (d.average) {\n avg = ` <span class=\"average \"> ( <span> <span class=\"symbol\">x̄</span> ${d.average} </span>) </span> `;\n tooltip = `cap-tooltip=\"Promedio ${d.label} : ${d.average} ${d.suffix || \"\"}\"`;\n }\n\n if (d.color) {\n if (isAccent) {\n className = d.color ? \"c-\" + d.color + \"--background\" : \"\";\n } else {\n className = d.color ? \"c-\" + d.color + \"--text \" : \"\";\n }\n }\n\n return `<div class=\"input-title-container ${isAccent ? \"input-title--accent\" : \"\"} ${d.isPersistent ? \"persistent\" : \"\"}\">\n <span ${tooltip} class=\"input-title ${className}\">\n ${avg}\n ${d.label}\n </span>\n\n </div>`;\n }).join(\"\");\n let toggleSidebarBtnString = `\n <button toggle-sidebar class=\"cap-btn-icon cap-btn-icon-raised cap-btn-toggle-sidebar \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronRight}\n </button> `;\n\n if (config.timeline.nav.left.hideToggleSidebarButton) {\n toggleSidebarBtnString = \"\";\n }\n\n let template = `<div>\n\n ${toggleSidebarBtnString}\n <div class=\"corner-title\">\n <span class=\"bottom-text\">\n ${config.timeline.corner.left.label}\n </span>\n </div>\n\n <div class=\"initial-corner\">\n <div class=\"initial-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.initial.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsInitialCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"extend-corner\">\n <div class=\"ex-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.extend.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsExtendCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"cap-btn-nav-corner\">\n <div class=\"input-titles\">\n ${labelsHeaderExtend}\n </div>\n </div>\n\n <div class=\"progress-bar progress-bar-left hide-progress\"></div>\n\n </div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(template);\n $elem.innerHTML = \"\";\n $elem.append(r);\n let toggleSidebar = $elem.querySelector(\"[toggle-sidebar]\");\n\n if (toggleSidebar) {\n toggleSidebar.addEventListener(\"click\", e => {\n r.dispatchEvent(new CustomEvent(\"toggleSidebar\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Derecho\n * Se usa para :\n * - titulos relacionados con los datos del sidebar Derecho\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom corner\n */\n createCornerRight(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"corner\", \"right\"]\n });\n return this.redrawCornerRight($elem, config, tab);\n },\n\n redrawCornerRight($el, config, tab = null) {\n let label = \"\";\n\n if (config.timeline.corner.right.label) {\n ` <span>\n ${config.timeline.corner.right.label}\n </span>`;\n }\n\n let str = `\n <div class=\"corner-title\">\n ${label}\n <div class=\"btn-container\"></div>\n </div>\n <div class=\"progress-bar progress-bar-right hide-progress\"></div>\n `;\n $el.innerHTML = str.trim();\n let $btnContainer = $el.querySelector(\".btn-container\");\n\n if (config.timeline.corner.right.buttons) {\n config.timeline.corner.right.buttons.forEach(btn => {\n let isEnabled = btn.getIsEnabled ? btn.getIsEnabled() : true;\n\n if (isEnabled) {\n let $btn = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"corner-btn cap-btn-raised\">\n ${btn.label || \"\"}\n </button> `);\n\n if (btn.onClick) {\n $btn.addEventListener(\"click\", btn.onClick);\n }\n\n $btnContainer.appendChild($btn);\n }\n });\n }\n\n if (config.timeline.corner.right.inputs) {\n config.timeline.corner.right.inputs.forEach(input => {\n let $input = this.createCornerRightInput({\n inputConfig: input\n });\n $btnContainer.appendChild($btn);\n });\n }\n\n return $el;\n },\n\n createCornerRightInput({\n inputConfig,\n dataDay = null,\n daySelected = null\n }) {\n let r = null;\n\n switch (inputConfig.type) {\n case \"autocomplete-crud\":\n r = this.createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n });\n break;\n }\n\n return r;\n },\n\n createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n }) {\n let elem = \"test\";\n return elem;\n },\n\n /**\n * Crea Header Top\n * Se usa para :\n * - Manejo de tabs\n * - Botones de navegación y selección de fecha\n * - Boton toggle Dark mode\n * - Boton toggle Header extended\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeaderTop(config, tabSelected = null) {\n return this.redrawHeaderTop(config, tabSelected, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\"));\n },\n\n redrawHeaderTop(config, tabSelected = null, $elem) {\n let str = `\n <div class=\"header-top\">`;\n\n if (config.timeline.tabs) {\n let showTabs = true;\n\n if (config.timeline.tabs.filter(t => !t.isHidden).length == 0) {\n showTabs = false;\n }\n\n if (showTabs) {\n const forceMobile = config.timeline && config.timeline.forceMobile === true;\n const tabSelectClasses = forceMobile ? \"tab-select-container c-d-mobile-flex\" : \"tab-select-container c-d-desktop-none c-d-mobile-flex\";\n const tabsContainerClasses = forceMobile ? \"tabs-container c-d-mobile-none\" : \"tabs-container c-d-desktop-flex c-d-mobile-none\";\n str += ` <div class=\"${tabSelectClasses}\">\n <select class=\"tabs-select\" >`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <option ${tab == tabSelected ? 'selected=\"selected\"' : \"\"} value=\"${tab.id}\"> ${tab.label} </option>`;\n }\n });\n str += `</select> </div>`;\n str += ` <div class=\"${tabsContainerClasses}\">`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <button\n class=\"tab ${tab.disabled ? \"disabled\" : \"\"} ${tab == tabSelected ? \"active\" : \"\"} ${tab.color}\"\n color=\"${tab.color}\"\n input-key=\"${tab.id}\"\n ${tab.tooltip ? 'cap-tooltip=\"' + tab.tooltip + '\"' : \"\"} >\n <span>${tab.label}</span>\n ${tab.icon || \"\"}\n </button>\n `;\n }\n });\n str += `</div>`;\n }\n }\n\n if (tabSelected) {\n if (tabSelected.legends) {\n str += ` \n <button toggle-legends class=\"cap-btn-icon cap-btn-icon-raised \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].toggleLegends}\n </button> \n\n <div class=\"legends-container force-mobile-style hide\"> `;\n tabSelected.legends.forEach(legend => {\n let colorClass = \"\";\n let colorBg = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(legend.color)) {\n colorBg = \"background:\" + legend.color;\n } else {\n colorClass = legend.color ? legend.color + \"--background\" : \"\";\n }\n\n str += ` <div\n class=\"legend ${legend.active ? \"active\" : \"\"}\"\n input-key=\"${legend.key}\"\n ${legend.tooltip ? `cap-tooltip=\"${legend.tooltip}\"` : \"\"} >\n <div class=\"icon-legend ${colorClass} ${legend.shape}\" style=\"${colorBg}\"></div>\n <span>${legend.label}</span>\n </div>`;\n });\n str += `</div>`;\n }\n }\n\n str += `\n\n <div class=\"spacer\"></div>\n\n\n\n <button cap-btn-prev class=\"cap-btn-icon cap-btn-icon-raised c-d-mobile-none\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowLeft}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon} \n </button>\n\n\n <button cap-btn-calendar class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].calendar}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <button cap-btn-next class=\"cap-btn-icon cap-btn-icon-raised c-d-mobile-none\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowRight}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <div class=\"spacer\"></div>\n\n <button toggle-dark class=\"cap-btn-icon cap-btn-header c-d-mobile-none ${config.timeline.withDarkToggle == false ? \"hide\" : \"\"}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].dark}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].light}\n </button>`;\n\n if (config.timeline.header.extend.enabled !== false) {\n str += `<button toggle-header class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n str += ` <div class=\"button-right-container\"></div>\n </div>`;\n /*\n `\n <button toggle-sidebar-right class=\"cap-btn-icon cap-btn-icon-raised\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\" />\n </svg>\n </span>\n </button>\n </div>\n `;\n */\n\n let $r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.replaceWith($r);\n\n if (config.timeline.header.rightButtons) {\n let $buttonContainer = $r.querySelector(\".button-right-container\");\n config.timeline.header.rightButtons.forEach(button => {\n const customClass = button.customClass || \"\";\n let hasBadge = false;\n\n if (button.hasBadge) {\n hasBadge = button.hasBadge();\n }\n\n let str = `<button class=\"cap-btn-icon cap-btn-icon-raised ${hasBadge ? \"cap-btn-has-badge\" : \"\"} ${customClass}\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"${button.icon}\" />\n </svg>\n </span>\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $button.addEventListener(\"click\", evt => button.onClick({\n evt\n }));\n $buttonContainer.append($button);\n });\n }\n\n let $toggleDark = $r.querySelector(\"[toggle-dark]\");\n\n if ($toggleDark) {\n $toggleDark.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleDark\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n let $btnCalendar = $r.querySelector(\"[cap-btn-calendar]\");\n\n if ($btnCalendar) {\n $btnCalendar.addEventListener(\"click\", e => {\n let x = e.x;\n let y = e.y;\n $r.dispatchEvent(new CustomEvent(\"clickCalendarIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n x,\n y\n }\n }));\n });\n }\n\n let $btnToggleHeader = $r.querySelector(\"[toggle-header]\");\n\n if ($btnToggleHeader) {\n $btnToggleHeader.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleHeader\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n /*\n $r.querySelector(\"[toggle-sidebar-right]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleSidebarRight\", {\n bubbles: true,\n cancelable: false,\n }));\n });\n */\n\n\n $r.querySelector(\"[cap-btn-prev]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerPrev\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-calendar]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerCalendar\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-next]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerNext\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n let $toggleLegendsBtn = $r.querySelector(\"[toggle-legends]\");\n\n if ($toggleLegendsBtn) {\n $toggleLegendsBtn.addEventListener(\"click\", e => {\n let $legendContainer = $r.querySelector(\".legends-container\");\n\n if ($legendContainer) {\n $legendContainer.classList.toggle(\"hide\");\n }\n });\n }\n\n $r.querySelectorAll(\".legend\").forEach($legend => {\n $legend.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let legendSelected = tabSelected.legends.find(tab => tab.key === key);\n\n if (legendSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectLegendHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n legend: legendSelected,\n $legend\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tab:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tabs-select:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"change\", e => {\n let key = parseFloat(e.currentTarget.value);\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n return $r;\n },\n\n /**\n * Crea Header\n * Se usa para :\n * - Mostrar fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeader(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"header\");\n return this.redrawHeader(config, $elem);\n },\n\n /**\n * Recrea Header, usado para redibujar\n * utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea Header\n * @return {Object} Elemento Dom\n */\n redrawHeader(config, $elem) {\n let datesTree = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateTreeRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container\"> `;\n Object.keys(datesTree).forEach(keyY => {\n let year = datesTree[keyY];\n str += `<div class=\"agno-calendario\">\n <span class=\"agno hide\">${keyY}</span>\n <div class=\"meses\">`;\n Object.keys(year).forEach(keyM => {\n let month = datesTree[keyY][keyM];\n str += ` <div class=\"mes-calendario\">\n <div class=\"mes ${Object.keys(month).length < 4 ? \"mes-reduced mes-reduced-\" + Object.keys(month).length : \"\"}\">\n <div class=\"mes-label\">\n ${_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMonthByPosition(keyM)} ${keyY}\n </div>\n </div>\n <div class=\"dias\">`;\n Object.keys(month).forEach(keyD => {\n let day = datesTree[keyY][keyM][keyD];\n let isWeekend = day.isWeekend;\n let isToday = day.isToday;\n let hasAlert = config.timeline.header.dateHasAlert ? config.timeline.header.dateHasAlert(day) : false;\n let date = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(day.date);\n str += `<div class=\"dia-calendario \n ${isToday ? \"today\" : \"\"}\n ${isWeekend ? \"weekend\" : \"\"}\n ${hasAlert ? \"has-alert\" : \"\"}\n ${config.timeline.dateSelectable ? \"is-clickeable\" : \"\"}\n ${config.timeline.dateWithContextMenu ? \"is-clickeable\" : \"\"}\n \" date=\"${date}\">${keyD}</div>`;\n });\n str += `</div></div>`;\n });\n str += `</div> </div>`;\n });\n str += `</div>`;\n $elem.innerHTML = \"\";\n $elem.append(_util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str));\n let $days = $elem.querySelectorAll(\".dia-calendario[date]\");\n $days.forEach($dia => {\n if (config.timeline.dateWithContextMenu) {\n $dia.addEventListener(\"contextmenu\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"contextMenuDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\"),\n clientX: evt.clientX,\n clientY: evt.clientY\n }\n }));\n });\n }\n\n if (config.timeline.dateSelectable) {\n $dia.addEventListener(\"click\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"clickDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\")\n }\n }));\n });\n }\n\n if (config.timeline.onMouseOverDate) {\n $dia.addEventListener(\"mouseover\", evt => {\n config.timeline.onMouseOverDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n\n if (config.timeline.onMouseOutDate) {\n $dia.addEventListener(\"mouseout\", evt => {\n config.timeline.onMouseOutDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n });\n return $elem;\n },\n\n /**\n * Crea Header extended\n * Se usa para :\n * -Mostrar inputs y datos para fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom headerExtended\n */\n createHeaderExtended(config) {\n if (config.timeline.header.extend.enabled == false) return null;\n let dates = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container-extended\">`;\n config.timeline.header.extend.data.forEach((d, d_index) => {\n if (d.isHidden) return \"\";\n let isPersistent = d.isPersistent;\n str += `<div class=\"input-list ${isPersistent ? \"persistent\" : \"\"}\">`;\n str += dates.map(date => {\n let value = \"\";\n let className = \"\";\n let isFuture = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isFuture(date);\n let isToday = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isToday(date);\n\n if (d.data) {\n let dataFounded = d.data.find(dataInput => {\n return _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(dataInput.date + \"T00:00:00\"), date);\n });\n\n if (dataFounded) {\n value = dataFounded.value || \"\";\n className += dataFounded.className + \" \" || false;\n }\n }\n\n if (d.editable === false || isFuture && d.editableFuture == false || isToday && d.editableToday == false) {\n return `<div>\n <span date=\"${_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(date)}\" \n index=\"${d_index}\" \n class=\" ${className} ${date.varName || \"\"} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" > \n ${value} \n </span>\n </div>`;\n }\n\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n return `<div class=\"dia-input\">\n <input \n date=\"${_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(date)}\" \n index=\"${d_index}\" \n class=\"header-input \n ${date.varName} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" \n type=\"number\"\n ${isDisabled ? \"disabled\" : \"\"} \n value=\"${value}\">\n </div>`;\n }).join(\"\");\n str += `</div>`;\n });\n str += `</div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n r.querySelectorAll(\"input.header-input\").forEach(input => {\n input.addEventListener(\"input\", e => {\n let date = e.currentTarget.getAttribute(\"date\");\n let index = e.currentTarget.getAttribute(\"index\");\n let value = e.currentTarget.value;\n let typeData = config.timeline.header.extend.data[index]; //refresh config value\n\n let data = typeData.data.find(d => _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(d.date + \"T00:00:00\"), new Date(date + \"T00:00:00\")));\n\n if (data) {\n data.value = value;\n } else {\n typeData.data.push({\n date: date,\n value: value\n });\n }\n\n r.dispatchEvent(new CustomEvent(\"changeInputHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n date: date,\n typeData: typeData,\n value: value\n }\n }));\n });\n });\n return r;\n },\n\n /**\n * Crear Sidebar Izquierdo\n * - Maneja items como arbol de 2 niveles (parent, children)\n * - El sidebar se divide en navList - InitialNav - extendedNav - BtnNav\n * - Se agrega itemDetail, para detalles de items\n *\n *\n * TODO: para evitar incrustar las ids en los inputs, se deben crear\n * los nodos uno por uno como elemento DOM, y agregarles los eventos directamente\n * ahora se hace seleccionando todos los inputs con querySelectorAll\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Sidebar Izquierdo\n */\n createNavLeft(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"left\"\n });\n return this.redrawNavLeft($elem, config, tab);\n },\n\n /**\n * Recrea Sidebar izquierdo, usado para redibujar\n * Utiliza $elem como elemento dom donde recrearlo\n *\n *\n * @param {Object} $elem - Elemento Dom donde crea el sidebar izquierdo\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom navLeft\n */\n redrawNavLeft($elem, config, tab = null) {\n let navList = \"\";\n let initialNavList = \"\";\n let exNavList = \"\";\n let btnNavList = \"\";\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n config.data.forEach(d => {\n if (d.isHidden) return;\n const hasBtn = !!d.onClickDetailButton;\n const isMobile = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile(config);\n const hasClickLabelToDetail = !!d.onClickDetailButton && !!d.clickLabelToDetail; // en mobile con clickLabelToDetail: no mostrar botón, el nombre es clickeable\n\n const showDetailBtn = hasBtn && !(isMobile && hasClickLabelToDetail);\n const detailBtnContent = showDetailBtn && isMobile ? d.iconDetailButton || _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].infoOutline : showDetailBtn ? d.labelDetailButton || \"\" : \"\";\n const detailBtn = showDetailBtn ? `<button class=\"detail-btn ${isMobile ? \"detail-btn-icon\" : \"\"}\" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" ${isMobile && d.labelDetailButton ? `title=\"${d.labelDetailButton.replace(/\"/g, \""\")}\"` : \"\"}>\n ${detailBtnContent}\n </button>` : \"\";\n navList += `\n <div class=\"nav-item\">\n\n\n <div class=\"nav-item-container parent\">`;\n\n if (d.children) {\n navList += `<button class=\"tree-icon ${d.isClosed ? \"\" : \"cap-rotate\"}\" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n navList += `\n <div class=\"item-title truncate full-width ${d.clickeable || hasClickLabelToDetail ? \"clickeable\" : \"\"} ${hasClickLabelToDetail ? \"click-label-to-detail\" : \"\"}\n ${d.navOver ? \"hoverable\" : \"\"} \" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n <div class=\"item-title-content\">\n ${d.label}\n </div>\n <div class=\"detail-btn-container\">\n ${detailBtn}\n </div>\n </div>\n </div>`;\n\n if (d.children) {\n navList += `\n <div class=\"children-items ${d.isClosed ? \"hide\" : \"\"} \" child-list=\"${d.id || -1}\">`;\n d.children.forEach(c => {\n if (c.isHidden) return;\n let lightColor = null;\n let lightClass = null;\n let lightSpan = \"\";\n let multiButtonsDetailTmpl = \"\";\n\n if (c.light) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(c.light)) {\n lightColor = c.light;\n } else {\n lightClass = c.light;\n }\n }\n\n if (c.light) {\n lightSpan = `<span \n class=\"light ${lightClass ? lightClass + \"-light\" : \"\"}\" \n style=\"${lightColor ? \"--light-color:\" + lightColor : \"\"}\">\n </span>`;\n }\n\n if (c.hasMultibuttons) {\n let iconFormatter = null;\n\n if (config.timeline.nav.left.initial.multibuttons && config.timeline.nav.left.initial.multibuttons.iconFormatter) {\n iconFormatter = config.timeline.nav.left.initial.multibuttons.iconFormatter;\n }\n\n let btnContent = iconFormatter ? iconFormatter({\n item: c,\n config\n }) : \"\";\n multiButtonsDetailTmpl = `<button class=\"multibuttons-btn\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\" \n ${isDisabled ? \"disabled\" : \"\"}>\n ${btnContent} \n </button>`;\n }\n\n navList += `\n <div class=\"child-nav-item\">\n <div class=\"nav-item-container\">\n `;\n /*\n <span class=\"nav-item-icon\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M19,15L13,21L11.58,19.58L15.17,16H4V4H6V14H15.17L11.58,10.42L13,9L19,15Z\" />\n </svg>\n </span>\n */\n\n navList += `\n ${lightSpan}\n ${multiButtonsDetailTmpl}\n <div \n class=\"item-title ${c.clickeable ? \"clickeable\" : \"\"} ${c.navOver ? \"hoverable\" : \"\"}\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\">\n\n <div class=\"truncate\">\n ${c.label}\n </div>\n </div>\n </div>\n </div>`;\n });\n navList += `\n </div>`;\n }\n\n navList += `</div>`; //initial\n\n initialNavList += `<div class=\"initial-nav-item parent\">`;\n\n if (d.withNav) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n initialNavList += `<div class=\"child-initial-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n });\n } //Ext\n\n\n exNavList += `<div class=\"ex-nav-item parent\">`;\n\n if (d.withExNav) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n exNavList += `<div class=\"child-ex-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value ? value.split(\":\") : [0, 0];\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n });\n } //buttons\n\n\n btnNavList += `<div class=\"cap-btn-nav-item parent\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (d.withBtnNav) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(d, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(d, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(d, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${d.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return; //buttons\n\n btnNavList += `<div class=\"cap-btn-child-nav-item parent ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (c.withNav !== false) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(c, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(c, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(c, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${c.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n });\n }\n });\n let itemDetail = ` <div class=\"detail-nav-item hide\">\n ${this.getDetailNavItemContent()}\n </div>`;\n let str = `<div class=\"nav-container\">\n ${itemDetail}\n <div class=\"nav-item-list\">\n ${navList}\n </div>\n <div class=\"initial-nav-list\">\n ${initialNavList}\n </div>\n <div class=\"extend-nav-list\">\n ${exNavList}\n </div>\n <div class=\"cap-btn-nav-list\">\n ${btnNavList}\n </div>\n </div>`;\n let navContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.innerHTML = \"\";\n $elem.append(navContainer); //detalle de nav-item\n\n $elem.querySelectorAll(\".item-title.hoverable\").forEach(i => {\n i.addEventListener(\"mouseover\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"overNavItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e,\n item: item,\n type: typeNode,\n pos: pos\n }\n }));\n });\n }); //oculta detalle de nav-item, al salir del nav-item-list\n\n $elem.querySelectorAll(\".nav-item-list\").forEach(i => {\n i.addEventListener(\"mouseleave\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }); //oculta detalle de nav-item-list, al salir de nav-item\n\n $elem.querySelectorAll(\".item-title:not(.hoverable)\").forEach(i => {\n i.addEventListener(\"mousemove\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n });\n $elem.querySelectorAll(\".item-title.clickeable\").forEach(i => {\n i.addEventListener(\"click\", e => {\n // si tiene clickLabelToDetail, ese handler se encarga (no disparar clickNavLeftItem)\n if (i.classList.contains(\"click-label-to-detail\")) return;\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let value = i.value;\n i.dispatchEvent(new CustomEvent(\"clickNavLeftItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n value: value\n }\n }));\n });\n });\n $elem.querySelectorAll(\".multibuttons-btn\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickMultiButtonsBtn\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n pos,\n button: i,\n event: e\n }\n }));\n });\n });\n $elem.querySelectorAll(\"input\").forEach(i => {\n i.addEventListener(\"change\", e => {\n let inputType = i.getAttribute(\"input-type\");\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let value = i.value;\n\n if (inputType == \"time\") {\n let hh_input = i.parentElement.querySelector(\"input.hh\").value;\n let mm_input = i.parentElement.querySelector(\"input.mm\").value;\n mm_input = mm_input < 10 ? \"0\" + parseFloat(mm_input) : mm_input;\n i.parentElement.querySelector(\"input.mm\").value = mm_input;\n value = hh_input + \":\" + mm_input;\n }\n\n i.dispatchEvent(new CustomEvent(\"saveNavLeftInput\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n item: item,\n type: typeNode,\n value: value,\n tabSelected: tab\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.cap-btn-shape\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickNavLeftButton\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n type: typeNode\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.detail-btn\").forEach(i => {\n i.addEventListener(\"click\", e => {\n e.stopPropagation(); // evitar que también dispare el click de item-title\n\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"parent\");\n\n if (item && item.onClickDetailButton) {\n item.onClickDetailButton({\n itemId: itemId,\n type: typeNode,\n item: item,\n event: e,\n button: i\n });\n }\n });\n }); // click en nombre/label ejecuta onClickDetailButton cuando clickLabelToDetail\n\n $elem.querySelectorAll(\".item-title.click-label-to-detail\").forEach(i => {\n i.addEventListener(\"click\", e => {\n if (e.target.closest(\".detail-btn\")) return; // el botón ya lo maneja\n\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"parent\");\n\n if (item && item.onClickDetailButton) {\n item.onClickDetailButton({\n itemId: itemId,\n type: typeNode,\n item: item,\n event: e,\n button: null\n });\n }\n });\n });\n $elem.querySelectorAll(\"button.tree-icon\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let dataConfig = config.data.find(d => d.id == itemId);\n let $navItem = e.currentTarget.closest(\".nav-item\");\n let $children = $navItem.querySelector(\".children-items\");\n let itemsToHide = e.currentTarget.closest(\"nav.left\").querySelectorAll(\"[child='\" + itemId + \"'], [child-list='\" + itemId + \"']\");\n\n if ($children) {\n if ($children.classList.contains(\"hide\")) {\n e.currentTarget.classList.add(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.remove(\"hide\"));\n dataConfig.isClosed = false;\n } else {\n e.currentTarget.classList.remove(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.add(\"hide\"));\n dataConfig.isClosed = true;\n }\n }\n\n i.dispatchEvent(new CustomEvent(\"clickNavLeftTreeIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode\n }\n })); //e.currentTarget.parent\n });\n });\n return $elem;\n },\n\n /**\n * Crea Html como String, para el detalle de items en el Sidebar Izquierdo\n *\n * @param {Object} [item={}] - Configuracion de item\n * @return {String} Html de ventana de detalle\n */\n getDetailNavItemContent(item = {}) {\n if (item.navOver == undefined) item.navOver = {};\n return `\n <div class=\"header-detail\">\n <div class=\"detail-title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"detail-subtitle\">\n ${item.navOver.subtitle || \"\"}\n </div>\n <div class=\"header-chip ${item.light ? item.light + \"-light\" : \"\"} ${item.navOver.chip ? \"\" : \"hide\"}\">\n ${item.navOver.chip || \"\"}\n </div>\n </div>\n\n <div class=\"detail-container\">\n ${item.navOver.content || \"\"}\n </div>`;\n },\n\n /**\n * Crea Sidebar Derecho\n * Usado principalmente para formulario de ingreso de datos para los dias\n * seleccionados\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @return {Object} {element, inputs}, element es el elemento Dom del sidebar,\n * inputs es un array de elementos Dom de cada input creado\n * (no son elementos html de tipo input)\n */\n createNavRight(config, tab = null) {\n var $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"right\"\n });\n return this.redrawNavRight(config, $elem, tab, null, [], null);\n },\n\n /**\n * Recrea Sidebar Derecho\n * Utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea el sidebar derecho\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @param {Object} dataDay - datos del dia seleccionando, para autorrelleno de formulario\n * @param {Object} daySelected - datos del dia seleccionado\n * @param {String} daySelected.date - fecha del dia seleccionado\n * @param {Object} daySelected.item - Item de Sidebar relacionado al dia seleccionado\n * @param {Object} daySelected.pos - posicion de dia seleccionado\n * @return {Object} Elemento Dom Sidebar Derecho\n */\n redrawNavRight(config, $elem, selected = null, tab = null, dataDay = null, daySelected = null) {\n let $navRight = $elem; //dom.createElement(\"nav\",{className:\"right\"});\n\n let $divContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"nav-input-container\"\n });\n let $inputs = [];\n let checkboxInputs = [];\n let inputsWithReload = [];\n let tabSelected = tab;\n selected = selected || [daySelected];\n\n if (tabSelected && tabSelected.inputs) {\n tabSelected.inputs.forEach(i => {\n if (i.disabled) return;\n\n if (i.showInputIf && !i.showInputIf(dataDay, daySelected, selected, tabSelected)) {\n return;\n }\n\n let $input = this.createInput(i, dataDay, daySelected, selected, tabSelected);\n\n if ($input) {\n $divContainer.appendChild($input);\n $inputs.push($input);\n\n if (i.type == \"checkbox\") {\n checkboxInputs.push($input);\n }\n\n if (i.reloadOnSelect != null) {\n inputsWithReload.push({\n $input,\n config: i\n });\n }\n }\n });\n } //manejo de eventos para inputs con showIf\n\n\n if (checkboxInputs) {\n checkboxInputs.forEach($c => {\n //obtiene key de checkbox\n let key = $c.getAttribute(\"input-key\");\n let props = tabSelected.inputs.find(i => {\n return i.key == key;\n });\n let isChecked = false;\n\n if (dataDay) {\n isChecked = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n } //obtiene inputs relacionados desde config para mostrar/ocultar\n\n\n let inputsToHide = tabSelected.inputs.filter(i => {\n return i.showIf && i.showIf == key;\n });\n let inputsToHideKeys = inputsToHide.map(i => i.key); //obtiene inputs del dom, filtrando con inputsToHide\n\n let $inputsHidden = $inputs.filter($i => {\n let inputKey = $i.getAttribute(\"input-key\");\n return inputsToHideKeys.indexOf(inputKey) > -1;\n }); //si hay inputs,\n\n if ($inputsHidden) {\n if (!isChecked) {\n $inputsHidden.forEach($i => {\n $i.classList.add(\"hide\");\n });\n }\n\n $c.addEventListener(\"input\", e => {\n $inputsHidden.forEach($i => {\n let fn = $c.querySelector(\"input[type='checkbox']\").checked ? \"remove\" : \"add\";\n $i.classList[fn](\"hide\");\n });\n });\n }\n });\n }\n\n let saveCancelBtns = this.createNavRightbuttons(config);\n $divContainer.appendChild(saveCancelBtns);\n $navRight.innerHTML = \"\";\n $navRight.appendChild($divContainer);\n return {\n element: $navRight,\n inputs: $inputs,\n inputsWithReload,\n saveCancelBtns\n };\n },\n\n /**\n * Crea Corner inferior izquierdo, como titulo para footer\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createCornerFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = \"\";\n\n if (config.timeline.footer) {\n str += `<div class=\"corner-footer\">\n <div class=\"corner-title\">\n <span>\n ${config.timeline.footer.label}\n </span>\n </div>\n </div>`;\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para mobile (debajo de la tabla, redimensiona la planilla)\n * Solo visible en mobile cuando hay selección.\n * Config: timeline.mobileFooter.cancelLabel, timeline.mobileFooter.cancelShowWhen,\n * timeline.mobileFooter.buttons\n * cancelShowWhen: \"select\"|\"detail\"|\"always\" - cuándo mostrar cancel (default: \"select\")\n * buttons: [{ id, label, icon?, customClass?, showWhen?, disabledWhenNoSelection?, onClick }]\n * showWhen: \"select\"|\"detail\"|\"always\" - select=checkbox activo, detail=checkbox inactivo (default: \"always\")\n * disabledWhenNoSelection: true - desactiva el botón en modo select sin días seleccionados\n * onClick({ evt, selected }) - selected: array de { index, date, item, pos } con días seleccionados\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom mobile-footer\n */\n createMobileFooter(config) {\n const mobileFooterConfig = config.timeline.mobileFooter || {};\n const cancelLabel = mobileFooterConfig.cancelLabel || \"Cancelar\";\n const cancelShowWhen = mobileFooterConfig.cancelShowWhen || \"select\";\n const buttons = Array.isArray(mobileFooterConfig.buttons) ? mobileFooterConfig.buttons : [];\n const mobileSelectActive = config.timeline.mobileSelectable === true;\n const mobileSelectLabel = mobileSelectActive ? \"Desactivar selección\" : \"Activar selección de días\";\n const mobileSelectIcon = _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCheckboxIcon ? _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCheckboxIcon(mobileSelectActive) : mobileSelectActive ? _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].checkboxChecked : _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].checkboxUnchecked;\n const forceMobile = config.timeline && config.timeline.forceMobile === true;\n const footerClasses = forceMobile ? \"mobile-footer c-d-mobile-flex\" : \"mobile-footer c-d-mobile-flex c-d-desktop-none\";\n let str = `\n <div class=\"${footerClasses}\">\n <div class=\"mobile-footer-content\">`;\n\n if (config.timeline.selectableDesktop !== false) {\n const countHidden = !mobileSelectActive;\n str += `\n <button type=\"button\" id=\"cap-btn-mobile-select\" toggle-mobile-select\n class=\"cap-btn-icon cap-btn-icon-raised mobile-footer-select-toggle ${mobileSelectActive ? \"active\" : \"\"}\"\n role=\"switch\" aria-checked=\"${mobileSelectActive}\" aria-label=\"${mobileSelectLabel}\"\n cap-tooltip=\"${mobileSelectLabel}\">${mobileSelectIcon}<span class=\"mobile-footer-select-label\">Seleccionar días</span><span class=\"mobile-footer-select-count\" ${countHidden ? 'style=\"display:none\"' : ''}>0 d</span></button>`;\n }\n\n str += `\n <div class=\"mobile-footer-buttons\">\n <button type=\"button\" class=\"cap-btn-outline mobile-footer-cancel mobile-footer-select-toggle\" data-show-when=\"${cancelShowWhen}\">${cancelLabel}</button>`;\n buttons.forEach((btn, index) => {\n const customClass = btn.customClass || \"\";\n const btnClass = btn.icon ? \"cap-btn-icon cap-btn-icon-raised\" : \"cap-btn-outline\";\n const showWhen = btn.showWhen || \"always\";\n const disabledWhenNoSelection = btn.disabledWhenNoSelection === true;\n const content = btn.icon ? `<span><svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${btn.icon}\"/></svg></span>` : btn.label || \"\";\n str += `<button type=\"button\" class=\"${btnClass} mobile-footer-btn mobile-footer-select-toggle ${customClass}\" data-mobile-btn-idx=\"${index}\" data-mobile-btn=\"${btn.id || \"\"}\" data-show-when=\"${showWhen}\" data-disabled-when-no-selection=\"${disabledWhenNoSelection}\">${content}</button>`;\n });\n str += `\n </div>\n </div>\n </div>`;\n const $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n const $toggleMobileSelect = $elem.querySelector(\"[toggle-mobile-select]\");\n\n if ($toggleMobileSelect) {\n $toggleMobileSelect.addEventListener(\"click\", e => {\n $elem.dispatchEvent(new CustomEvent(\"toggleMobileSelect\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = `\n <footer>\n <div class=\"footer-container\">\n `;\n config.timeline.footer.data.forEach(d => {\n str += `\n <div class=\"footer-item\">${d.value}</div>\n `;\n });\n str += `\n </div>\n </footer>\n `;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object[]} selected - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom Corner Footer\n */\n createSelectBoard(config, selected) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"select-container\"\n });\n return this.redrawSelectBoard($elem, selected);\n },\n\n /**\n * Crea linea vertical para fecha Actual\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createTodayLine(config) {\n return this.redrawTodayLine(config, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n }));\n },\n\n /**\n * Recrea linea vertical para fecha Actual\n * si el elemento $elem no es enviado, se crea un nuevo elemento\n *\n * Si el dia actual no esta dentro del rango de fechas del config,\n * deshabilita la linea con la clase css .disable-line\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem=null] - Elemento Dom donde recrea la linea, si es null, la crea\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawTodayLine(config, $elem = null) {\n let endTime = new Date(config.timeline.end).getTime();\n let todayTime = new Date().getTime();\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n if ($elem == null) $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n });\n\n if (endTime < todayTime) {\n $elem.classList.add(\"disable-line\");\n } else {\n $elem.classList.remove(\"disable-line\");\n }\n\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(new Date())));\n let diff = diffDays * dayWidth;\n diff += dayWidth / 2 - 2; // para centrar linea\n\n Object.assign($elem.style, {\n \"margin-left\": diff + \"px\",\n height: height + \"px\"\n });\n return $elem;\n },\n\n /**\n * Crea elemento FloatBox, que contiene los datos que se muestra en la tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n createFloatBox(config, tab) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"float-box-container\"\n });\n return this.redrawFloatBox(config, tab, $container);\n },\n\n /**\n * Recrea elemento FloatBox, que contiene los datos que se muestra en la tabla\n * Se usa principalmente para mostrar datos en la tabla de la planilla\n * los muestra de manera flotante, calculando el Top y el Left segun la poscion\n *\n * Se consideran los elementos padres ocultos, para ocultar los datos\n *\n * Se insertan los elementos FloatBox, como elemento con datos de un item y dia especifico\n *\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawFloatBox(config, tab, $container) {\n $container.innerHTML = \"\"; //let tabSelected = tab || null;\n\n config.data.forEach(dataParent => {\n if (dataParent.isHidden) return;\n (dataParent.data || []).forEach(data => {\n this.createFloatBoxItem({\n container: $container,\n data,\n item: dataParent,\n isClosed: dataParent.isClosed,\n tab,\n config,\n typeNode: \"parent\"\n });\n });\n dataParent.children.forEach(dataChild => {\n if (dataChild.isHidden) return;\n dataChild.data.forEach(data => {\n this.createFloatBoxItem({\n container: $container,\n data,\n item: dataChild,\n isClosed: dataParent.isClosed,\n tab,\n config,\n typeNode: \"child\"\n });\n });\n });\n });\n return $container;\n },\n\n createFloatBoxItem({\n container,\n data,\n item,\n isClosed,\n tab,\n config,\n typeNode = \"child\"\n }) {\n // Verificar si hay mensaje\n let msg = null;\n\n if (tab.floatBox && tab.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data, tab.floatBox.messagePath);\n }\n\n const hasMessage = msg || data.message && data.message.value; // Verificar si hay errores\n\n const hasErrors = data.errors && data.errors.length > 0; // Verificar si hay contenido visible en floatBox\n\n let hasVisibleContent = false;\n\n if (hasMessage || hasErrors) {\n hasVisibleContent = true;\n } else if (data.values && tab && tab.floatBox) {\n // Verificar si hay contenido visible en nums, dots, plots, icons\n if (tab.floatBox.nums) {\n hasVisibleContent = tab.floatBox.nums.some(n => {\n let value = null;\n\n if (n.varName) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName);\n if (value === null || value === undefined) return false;\n }\n\n let showIf = true;\n let hideIf = false;\n\n if (n.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varShow)); // Si no hay varName pero hay varShow, considerar como contenido visible si se cumple la condición\n\n if (!n.varName) {\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n return showIf && !hideIf;\n }\n }\n\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n if (n.hidden === true) {\n hideIf = true;\n }\n\n return value !== null && showIf && !hideIf;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.dots) {\n hasVisibleContent = tab.floatBox.dots.some(dot => {\n return _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName) !== null;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.plots) {\n hasVisibleContent = tab.floatBox.plots.some(n => {\n return _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName) !== null;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.icons) {\n hasVisibleContent = tab.floatBox.icons.some(iconConfig => {\n if (iconConfig.varName) {\n return _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.varName) !== null;\n }\n\n return iconConfig.icon !== null;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.rowDots) {\n hasVisibleContent = tab.floatBox.rowDots.some(row => {\n return Array.isArray(row) && row.some(dot => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName);\n if (value === null || value === undefined) return false;\n let showIf = true;\n let hideIf = false;\n\n if (dot.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varShow));\n }\n\n if (dot.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varHide));\n }\n\n return showIf && !hideIf;\n });\n });\n }\n } // Si no hay contenido visible, no crear el floatBox\n\n\n if (!hasVisibleContent) {\n return null;\n } //children Data\n\n\n let position = this.getPositionFloatBox(config, data, item, typeNode);\n let className = \"\";\n\n if (data.errors && data.errors.length > 0) {\n className += \"has-errors \";\n\n if (data.errors[0]) {\n className += data.errors[0].classNameIcon + \" \";\n }\n }\n\n if (isClosed) {\n className += \"hide \";\n }\n\n if (hasMessage) {\n className += \"has-message \";\n }\n\n let strMsg = \"\";\n\n if (hasMessage) {\n let viewBox = \"0 0 24 24\"; //email outline icon\n\n let icon = \"M22 6C22 4.9 21.1 4 20 4H4C2.9 4 2 4.9 2 6V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V6M20 6L12 11L4 6H20M20 18H4V8L12 13L20 8V18Z\";\n strMsg = `\n <div class=\"icon-message\">\n <svg viewBox=\"${viewBox}\">\n <path d=\"${icon}\" />\n </svg>\n </div>\n `;\n }\n\n let str = `\n <div class=\"float-box ${className} \"\n style=\"${position ? position : \"\"}\"\n item-id=\"${item.id || -1}\"\n type-node=\"${item.type || \"\"}\">\n\n ${strMsg}\n <div class=\"float-box-content\">`;\n let strExt = `\n <div class=\"float-box-ext ${isClosed ? \"hide\" : \"\"}\"\n style=\"${position ? position : \"\"}\"\n item-id=\"${item.id || -1}-ext\"\n type-node=\"${item.type || \"\"}\">\n <div class=\"long-bar-container\">`;\n\n if (tab && tab.floatBox) {\n if (tab.floatBox.plots) {\n str += `<div class=\"plot-floatbox-container\">`;\n tab.floatBox.plots.forEach(n => {\n let cssVars = \"\";\n let className = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName) !== null) {\n if (n.color) {\n cssVars = `--local-color:${n.color};`;\n }\n\n className = n.className || \"\";\n str += `<div class=\"plot-floatbox ${className} ${n.style || \"\"}\" style=\"${cssVars} \"></div>`;\n }\n });\n str += `\n </div>`;\n }\n\n if (tab.floatBox.icons) {\n tab.floatBox.icons.forEach(iconConfig => {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n let viewBox = \"0 0 24 24\";\n let icon = iconConfig.icon || null;\n\n if (iconConfig.varName) {\n let iconVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.varName);\n\n if (iconVar) {\n icon = iconVar;\n }\n }\n\n if (iconConfig.className) {\n className = iconConfig.className;\n }\n\n if (iconConfig.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(iconConfig.color)) {\n colorStyle = `--local-color: ${iconConfig.color};`;\n } else {\n colorClass = iconConfig.color;\n }\n }\n\n if (iconConfig.colorVarName) {\n let colorVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.colorVarName);\n\n if (colorVar) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(colorVar)) {\n colorStyle = `--local-color: ${colorVar};`;\n } else {\n colorClass = colorVar;\n }\n }\n }\n\n str += `\n <div class=\"icon-floatbox ${className} ${colorClass ? \"has-color\" : \"\"}\" style=\"${colorStyle}\">\n <svg viewBox=\"${viewBox}\">\n <path d=\"${icon}\" />\n </svg>\n </div>\n `;\n });\n } //numeros en el floatBox\n\n\n if (tab.floatBox.nums) {\n tab.floatBox.nums.forEach(n => {\n if (tab.legends && n.tabKey) {\n let legend = tab.legends.find(l => l.key == n.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n let classNamesExt = \"\";\n let colorStyleExt = \"\";\n let cssVars = \"\";\n\n if (n.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName);\n }\n\n if (n.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varShow)); // Si no hay varName pero hay varShow, establecer dataFloatBox como string vacío para renderizar bloque vacío\n\n if (!n.varName) {\n dataFloatBox = \"\";\n } else {\n dataFloatBox = dataFloatBox || \"\";\n }\n }\n\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n if (n.hidden === true) {\n hideIf = true;\n }\n\n if (n.shape) {\n className += \"shape-\" + n.shape;\n }\n\n if (n.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(n.color)) {\n colorStyle = `--local-color: ${n.color};`;\n } else {\n colorClass = n.color;\n }\n }\n\n if (n.longBar) {\n let longBarColor = \"\";\n let longBarOpacity = \"\";\n\n if (n.longBarColor) {\n longBarColor = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarColor);\n }\n\n if (longBarColor) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(longBarColor)) {\n colorStyleExt = `--local-color: ${longBarColor};`;\n } else {\n classNamesExt += longBarColor + \"-light \";\n }\n } else if (colorClass && colorClass != \"\") {\n classNamesExt += colorClass;\n } else if (colorStyle && colorStyle != \"\") {\n colorStyleExt = colorStyle;\n }\n\n if (n.longBarOpacity) {\n longBarOpacity = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarOpacity) || null;\n\n if (longBarOpacity) {\n colorStyleExt += \"--local-opacity: \" + longBarOpacity + \";\";\n }\n }\n\n if (n.longBarClassName) {\n classNamesExt += _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarClassName) || \"\";\n }\n\n let longBar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBar);\n\n if (longBar) {\n cssVars = `--long:${longBar};`;\n }\n }\n\n if (dataFloatBox !== null && showIf && !hideIf) {\n str += `<span class=\"data ${colorClass} ${className}\" style=\"${colorStyle}\">\n ${typeof dataFloatBox == \"string\" ? dataFloatBox : \"\"}\n ${typeof dataFloatBox == \"number\" ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(dataFloatBox, n.round) : \"\"}\n </span>`;\n\n if (n.longBar && cssVars) {\n strExt += `<div class=\"long-bar ${classNamesExt}\" style=\"${colorStyleExt} ${cssVars} \"></div> `;\n }\n }\n });\n } //puntos en el floatBox\n\n\n if (tab.floatBox.dots) {\n str += `<div class=\"dot-container-middle\">`;\n tab.floatBox.dots.forEach(dot => {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName) !== null) {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.shape) {\n className += dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n str += `\n <div class=\"dot ${colorClass} ${className}\" style=\"${colorStyle}\" ></div>`;\n }\n });\n str += `\n </div>`;\n } //fila de puntos en floatBox\n\n\n if (tab.floatBox.rowDots) {\n tab.floatBox.rowDots.forEach(row => {\n let freeColumns = 4;\n str += `<span class=\"rowdot--row \">`;\n row.forEach(dot => {\n if (tab.legends && dot.tabKey) {\n let legend = tab.legends.find(l => l.key == dot.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName);\n dataFloatBox = parseInt(dataFloatBox);\n }\n\n if (dot.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varShow));\n dataFloatBox = dataFloatBox || \"\";\n }\n\n if (dot.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varHide));\n }\n\n if (dot.shape) {\n className += \" shape-\" + dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n if (dataFloatBox !== null && dataFloatBox > 0 && showIf && !hideIf && freeColumns > 0) {\n let n = dataFloatBox > freeColumns ? freeColumns : dataFloatBox;\n freeColumns -= n;\n\n for (let index = 0; index < n; index++) {\n str += `<div class=\"rowdot--dot ${colorClass} ${className}\" style=\"${colorStyle}\"></div>`;\n }\n }\n });\n str += `</span>`;\n });\n }\n }\n\n str += `\n </div>\n </div>`;\n strExt += `\n </div>\n </div>`;\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $elemExt = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strExt);\n $elem.addEventListener(\"mouseover\", e => {\n $elem.dispatchEvent(new CustomEvent(\"mouseOverFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: item,\n data: data,\n originalEvt: e\n }\n }));\n });\n $elem.addEventListener(\"click\", e => {\n $elem.dispatchEvent(new CustomEvent(\"clickFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: item,\n data: data,\n originalEvt: e\n }\n }));\n });\n container.appendChild($elem);\n container.appendChild($elemExt);\n },\n\n /**\n * Crea DetailDay, detalle de valores de item y Dia\n * se usa para:\n * - Muestra nombre de item y detalles\n * - Muestra capsulas de datos\n * - Muestra Pills, pildoras de datos resumidos\n * - Muestra alertas\n * - Muestra Mensaje\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @param {Boolean} [onlyStringContent = false] - para escoger si devuelve String o DomElement\n * @return {String|Object} Elemento como String o DomElement\n */\n createDetailDay(config, item = {}, dataDay, tabSelected, onlyStringContent = false) {\n let str = `\n <div class=\"header-detail\">\n <div class=\"title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"subtitle\">\n ${dataDay ? _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(dataDay.date) : \"\"}\n </div>\n </div>\n\n <div class=\"list-detail list column-flex\">`; //CAPSULES\n\n let visibleItemsCount = 0; // Contador de elementos visibles\n\n if (dataDay) {\n config.timeline.detailDay.capsules.forEach(cap => {\n //para comprobar si tiene datos, se obtiene el primer valor\n //de la lista de values de una capsula\n let hasValues = cap.values.filter(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName);\n return value !== null && !(Array.isArray(value) && value.length === 0);\n }).length > 0;\n let hideIf = false;\n\n if (cap.hideIf) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, cap.hideIf));\n }\n\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (cap.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(cap.color)) {\n colorStyle = `--local-color: ${cap.color};`;\n colorStyle += `--local-color-font: ${cap.color};`;\n } else {\n colorClass = cap.color;\n }\n }\n\n if (hasValues && !hideIf) {\n visibleItemsCount++; // Incrementar contador de elementos visibles\n\n str += `\n <div class=\"item-detail ${colorClass}\" style=\"${colorStyle}\">\n\n <div class=\"left-icon ${cap.shape || \"\"} \"></div>\n\n <div class=\"name\">\n <span>\n ${cap.title || \"\"}\n </span>\n </div>`;\n str += `\n <div class=\"item-description\"> `;\n cap.values.forEach(v => {\n let value = v.varName ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName) : null;\n\n if (cap.isLabeledArray) {\n value.forEach(valueLabeled => {\n let outputValue = null;\n let valueName = v.valueName ? v.valueName : \"value\";\n let tempValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(valueLabeled, valueName);\n\n if (tempValue) {\n outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(tempValue, v.round) : tempValue;\n }\n\n if (v.formatter) {\n outputValue = v.formatter(valueLabeled);\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n str += outputValue == null ? \"\" : `\n <div class=\"desc ${v.showColumn ? \"desc-column\" : \"\"}\">\n \n <div class=\"label\">\n ${v.hideLabel ? \"\" : valueLabeled.label}\n </div >\n <div class=\"val\">` + (v.hidePreffix !== true ? `\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>` : \"\") + `<span class=\"value\">\n ${outputValue}\n </span>` + (v.hideSuffix !== true ? `\n <span class=\"suffix\">\n ${valueLabeled.suffix || v.suffix || \"\"}\n </span>` : \"\") + `\n </div>\n </div>`;\n });\n } else {\n let outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round) : value;\n\n if (v.formatter) {\n outputValue = v.formatter({\n options: v,\n dataDay,\n outputValue\n });\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n if (outputValue) {\n str += `\n <div class=\"desc\">\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>\n <span class=\"value\">\n ${outputValue}\n </span>\n <span class=\"suffix\">\n ${v.suffix || \"\"}\n </span>\n </div>`;\n }\n }\n });\n str += `\n </div>`;\n str += `\n </div>`; // end .item-detail\n }\n });\n } // Agregar clase single-item si solo hay un elemento visible\n\n\n const columnClass = visibleItemsCount === 1 ? \"list column-flex single-item\" : \"list column-flex\";\n str = str.replace(\"list column-flex\", columnClass);\n str += `\n </div>`; // list-detail\n //PILLS\n\n if (config.timeline.detailDay.pillsVarName && dataDay && dataDay.values[config.timeline.detailDay.pillsVarName]) {\n str += `\n <div class=\"elements-detail\">\n <div class=\"name\"> ${config.timeline.detailDay.pillsTitle} </div>\n <div class=\"elements-list\">`;\n dataDay.values[config.timeline.detailDay.pillsVarName].forEach(e => {\n let value = e.value;\n\n if (typeof outputValue == \"number\") {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(value);\n }\n\n str += `\n <div class=\"element-detail\">\n <b>${e.label}</b>\n ${value}\n </div>`;\n });\n str += `\n </div>\n </div>`; //end .element-detail > .element-list\n } //str += `</div>`;\n\n\n if (dataDay && dataDay.errors && dataDay.errors.length > 0) {\n dataDay.errors.forEach(err => {\n str += `\n <div class=\"alert\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].alert}\n ${err.label}\n </div>`;\n });\n }\n\n let msg = null;\n let author = null;\n let dateMsg = null;\n\n if (dataDay && tabSelected.floatBox && tabSelected.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, tabSelected.floatBox.messagePath);\n }\n\n if (!msg && dataDay && dataDay.message && dataDay.message.value) {\n msg = dataDay.message.value;\n author = dataDay.message.author;\n dateMsg = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(new Date(dataDay.message.date));\n }\n\n if (msg) {\n //msg = msg.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n str += `\n <div class=\"msj-container\">\n <div class=\"msj\">\n <pre>${msg || \"\"}</pre>\n </div>\n <div class=\"msj-detail\">\n <span class=\"email\"> ${author || \"\"} </span>\n <span class=\"date\"> ${dateMsg || \"\"} </span>\n </div>\n </div>`;\n }\n\n let strContainer = `<div class=\"detail-day dd-hide\"> ${str} </div>`;\n if (onlyStringContent) return str;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strContainer);\n },\n\n /**\n * Recrea HTML de detailDay\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @return {String} Elemento como String, de detailDay\n */\n redrawDetailDay(config, item, dataDay, tabSelected) {\n return this.createDetailDay(config, item, dataDay, tabSelected, true);\n },\n\n /**\n * Reposiciona FloatBox\n * verifica si el parent esta desplegado, para ocultar los datos\n *\n * Solo actualiza las alturas de los floatbox\n * no recrea los floatbox, es mas optimo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n */\n repositionFloatBox(config, $floatBoxContainer) {\n $floatBoxContainer.querySelectorAll(\".float-box\").forEach($f => {\n let itemId = $f.getAttribute(\"item-id\");\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n let item, parent;\n ({\n item,\n parent\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"child\", true));\n\n if (item) {\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item);\n $f.style.top = top * itemHeight + \"px\";\n\n if (parent && parent.isClosed) {\n $f.classList.add(\"hide\");\n } else if ($f.classList.contains(\"hide\")) {\n $f.classList.remove(\"hide\");\n }\n }\n });\n },\n\n /**\n * Recrea indicadores de dias seleccionados\n *\n * @param {Object} $elem - Elemento Dom donde crea los elementos seleccionados\n * @param {Object[]} selected - Array con los dias seleccionados\n * @return {Object} Elemento Dom que contiene los indicadores de dias seleccionados\n */\n redrawSelectBoard($elem, selected) {\n $elem.innerHTML = \"\";\n let hasNumber = true;\n\n if (selected) {\n if (selected.length == 1) hasNumber = false;\n selected.forEach(s => {\n let attributes = [];\n\n if (hasNumber) {\n attributes.push({\n name: \"cap-badge\",\n value: s.index\n });\n }\n\n let $s = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"selected-day\",\n attributes\n });\n $s.style.left = s.pos.left + \"px\";\n $s.style.top = s.pos.top + \"px\";\n $elem.append($s);\n });\n }\n\n return $elem;\n },\n\n /**\n * Obtiene String con estilos CSS de la posicion de un floatBox\n * calculado segun item y fecha de los valores\n *\n * @param {Object} config - Configuracion capibara, para ver fecha de inicio\n * @param {Object} data - Datos del dia indicado\n * @param {Object} item - Item relacionado\n * @return {String} String CSS top y left , para posicionar floatBox en table\n */\n getPositionFloatBox(config, data, item, typeNode) {\n let left = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, data.date);\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item, typeNode);\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n left *= dayWidth;\n top *= itemHeight;\n return \"top: \" + top + \".5px; left:\" + left + \".5px;\";\n },\n\n /**\n * Crea Boton como elemento Dom\n *\n * @param {Object} props - propiedades para boton\n * @param {String} props.className - classes css para boton\n * @param {*} props.key - key para identificar a boton\n * @param {String} props.label - Texto boton\n * @return {Object} Elemento Dom del boton creado\n */\n createButton(props) {\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"${props.className || \"\"}\" input-key=\"${props.key || \"\"}\">\n ${props.label || \"\"}\n </button>`);\n },\n\n /**\n * Crea Botones de guardar y cancelar los datos de formulario del sidebar derecho\n *\n * @return {Object} Elemento Dom del botones creados\n */\n createNavRightbuttons(config) {\n let btnSection = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`<div class=\"button-section\"></div>`);\n\n if (config.timeline.nav.right && config.timeline.nav.right.hideSaveButton != true) {\n let saveBtn = this.createButton({\n label: \"Guardar\",\n className: \"cap-btn-raised\"\n });\n btnSection.appendChild(saveBtn);\n saveBtn.addEventListener(\"click\", e => {\n saveBtn.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n if (config.timeline.nav.right && config.timeline.nav.right.hideCancelButton != true) {\n const cancelLabelButton = config.timeline.nav.right.cancelLabelButton || \"Cancelar\";\n let cancelBtn = this.createButton({\n label: cancelLabelButton,\n className: \"cap-btn-outline\"\n });\n btnSection.appendChild(cancelBtn);\n cancelBtn.addEventListener(\"click\", e => {\n cancelBtn.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return btnSection;\n },\n\n /**\n * Crea Input como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @param {Object[]} [selected = []] - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom del input creado\n */\n createInput(props, dataDay = null, daySelected = null, selected = [], tabSelected) {\n let r = null;\n if (props.ignoreRender == true) return r;\n\n switch (props.type) {\n case \"custom\":\n r = props.render ? props.render({\n props,\n dataDay,\n daySelected,\n selected\n }) : null;\n r.setAttribute(\"input-key\", props.key);\n break;\n\n case \"select\":\n r = this.createInputSelect(props, dataDay, daySelected);\n break;\n\n case \"file\":\n r = this.createInputFile(props, dataDay);\n break;\n\n case \"fileLink\":\n r = this.createFileLink(props, dataDay);\n break;\n\n case \"text\":\n r = this.createText(props, selected);\n break;\n\n case \"title\":\n r = this.createTitle(props);\n break;\n\n case \"number\":\n r = this.createInputNumber(props, dataDay);\n break;\n\n case \"float\":\n r = this.createInputFloat(props, dataDay);\n break;\n\n case \"message\":\n r = this.createInputMessage(props, dataDay);\n break;\n\n case \"textarea\":\n r = this.createInputTextArea(props, dataDay);\n break;\n\n case \"checkbox\":\n r = this.createInputCheckbox(props, dataDay);\n break;\n\n case \"inputList\":\n r = this.createInputList(props, dataDay, daySelected);\n break;\n\n case \"input-box\":\n r = this.createInputBox(props, dataDay);\n break;\n\n case \"list\":\n r = this.createList(props, dataDay);\n break;\n\n case \"data-list\":\n r = this.createDataList(props, dataDay, daySelected, selected, tabSelected);\n break;\n\n case \"button\":\n r = this.createInputButton(props, dataDay);\n break;\n\n case \"buttons-group\":\n r = this.createInputButtonsGroup(props, dataDay);\n break;\n\n case \"time\":\n r = this.createInputTime(props, dataDay);\n break;\n\n case \"input-text\":\n default:\n r = this.createInputText(props, dataDay);\n }\n\n return r;\n },\n\n /**\n * Crea Input con formato Hora, como elemento Dom\n *\n * Usa 2 inputs, hora y minutos\n *\n * el value que interpreta es String HH:MM\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTime(props, dataDay) {\n let hhValue = \"\";\n let mmValue = \"\";\n\n if (dataDay && dataDay.values) {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n\n if (value) {\n value = value.split(\":\");\n hhValue = value[0];\n mmValue = value[1];\n }\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label || \"\"}\n </span>\n <div class=\"d-flex\">\n <div class=\"time\">\n <input type=\"number\"\n class=\"hour\"\n id=\"test\"\n placeholder=\"00\"\n min=\"0\"\n max=\"99\"\n value=\"${hhValue}\">\n <span class=\"symbol\">:</span>\n <input type=\"number\"\n class=\"minutes\"\n placeholder=\"00\"\n min=\"0\"\n max=\"59\"\n value=\"${mmValue}\">\n </div>\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let $hhInput = $elem.querySelector(\".hour\");\n let $mmInput = $elem.querySelector(\".minutes\");\n $hhInput.addEventListener(\"input\", e => {\n $hhInput.dispatchEvent(new CustomEvent(\"changeTimeInputHH\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n $mmInput.addEventListener(\"input\", e => {\n $mmInput.dispatchEvent(new CustomEvent(\"changeTimeInputMM\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n this.addKeyDownInputEvents($hhInput, $elem, props);\n this.addKeyDownInputEvents($mmInput, $elem, props);\n return $elem;\n },\n\n /**\n * Crea Text como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createText(props, selected) {\n let label = props.label;\n\n if (props.formatter) {\n label = props.formatter({\n selected\n });\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide \" : \"\"} ${props.toLeft ? \"to-left \" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${props.classNames || \"\"}\">\n ${label}\n </span>\n </div>`);\n return $elem;\n },\n\n /**\n * Crea Title como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createTitle(props) {\n let classNames = \"text-title\";\n\n if (props.isSubtitle) {\n classNames = \"text-subtitle\";\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${classNames}\">\n ${props.label}\n </span>\n </div>`);\n },\n\n /**\n * Crea Input tipo Numerico como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputNumber(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n value = value || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n <span class=\"text-subtitle-2 \">\n ${props.suffix ? \"(\" + props.suffix + \")\" : \"\"}\n </span>\n </div>\n <div class=\"d-flex\">\n <input type=\"number\"\n class=\"nav-input\"\n value=\"${value}\">\n\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input tipo FIlepicker como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFile(props, dataDay) {\n let value = \"\";\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n value = value || \"\";\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"nav-input-file\" >\n <button class=\"small-close clear-file-input\">x</button>\n <label >\n <span class=\"nav-input-file-label\">\n ${props.pickerLabel || \"Seleccionar Archivo\"}\n </span>\n <input type=\"file\" value=\"${value}\">\n </label>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n let $inputElem = elem.querySelector(\"input\");\n let $clearBtn = elem.querySelector(\".clear-file-input\");\n let $fileInputLabel = elem.querySelector(\".nav-input-file-label\");\n $inputElem.addEventListener(\"change\", evt => {\n let fileName = $inputElem.files[0].name;\n $fileInputLabel.textContent = fileName;\n });\n $clearBtn.addEventListener(\"click\", evt => {\n $inputElem.value = \"\";\n $fileInputLabel.textContent = props.pickerLabel || \"Seleccionar Archivo\";\n evt.stopPropagation();\n });\n return elem;\n },\n\n createFileLink(props, dataDay) {\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n //value = utils.getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n if (fileName == \"\") return null;\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n return elem;\n },\n\n /**\n * Crea lista de Inputs, con array de valores, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @return {Object} Elemento Dom del input creado\n */\n createInputList(props, dataDay, daySelected = null) {\n let inputList = []; //obtiene inputs default, para crearlos, sin valores\n\n if (daySelected && Array.isArray(daySelected.item.values[props.inputList])) {\n inputList = daySelected.item.values[props.inputList].map(inputRow => {\n //limpia inputList inputs\n inputRow.inputs.map(input => {\n input.value = null;\n return input;\n }); //obtiene valores del dia\n\n if (dataDay && dataDay.values) {\n let inputValues = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.valuesPath); //autorrellena\n\n if (inputValues) {\n inputRow.inputs.forEach(input => {\n let values = inputValues.find(v => v.id == inputRow.id);\n input.value = values ? values[input.varName] : null;\n });\n }\n }\n\n return inputRow;\n });\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"input-section-list ${props.isHidden ? \"hide\" : \"\"} \">\n <div class=\"input-section-title\">\n <span class=\"text-title\">\n ${props.label}\n </span> \n </div>`;\n inputList.forEach(inputRow => {\n str += `\n <div class=\"input-section ${props.toRight ? \"to-right\" : \"\"}\" >\n <span class=\"text-subtitle\">\n ${inputRow.label}\n </span>`;\n inputRow.inputs.forEach(input => {\n str += ` \n <div class=\"input-section-col\" >\n <span class=\"text-subtitle \">\n ${input.label}\n </span>\n <input type=\"number\"\n input-id=\"${inputRow.id}\"\n input-label=\"${input.label}\"\n class=\"nav-input small\"\n value=\"${input.value}\">\n </div>`;\n });\n str += `\n </div>`;\n });\n str += `</div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let inputsElem = elem.querySelectorAll(\"input\");\n inputsElem.forEach(inputElem => this.addKeyDownInputEvents(inputElem, elem, props));\n return elem;\n },\n\n createInputSelect(props, dataDay, daySelected = null) {\n let value = null;\n let options = props.options;\n\n if (dataDay && dataDay.values) {\n let val = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n value = val ? val.value : null;\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"${props.isHidden ? \"hide\" : \"\"}\" >\n <div class=\"input-section \" >\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n\n <select class=\"input-select\">\n\n <option value=\"\" ${value == null ? \"selected\" : \"\"}>\n ${props.noDataLabel || \"-- sin asignar --\"}\n </option>\n\n `;\n options.forEach(option => {\n str += `\n <option value=\"${option.id}\" ${option.id == value ? \"selected\" : \"\"}>\n ${option.label}\n </option>\n `;\n });\n str += `\n\n </select>\n </div>\n\n </div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n return elem;\n },\n\n /**\n * Crea Input de texto TextArea como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTextArea(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <textarea class=\"\" value=\"${value}\"></textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input de Mensaje como elemento Dom\n * utiliza TextArea\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputMessage(props, dataDay) {\n let value = dataDay ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) : null;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section to-left msj-input-container ${props.isHidden ? \"hide\" : \"\"} \"\n input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n Mensaje\n </span>\n <textarea class=\"msj\">${value || \"\"}</textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\"); //this.addKeyDownInputEvents(inputElem);\n\n return elem;\n },\n\n /**\n * Crea Input de texto como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputText(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"text\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input Numero Flotante, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFloat(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"number\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n createDataList(props, dataDay, daySelected, selected, tabSelected) {\n let list = [];\n\n if (dataDay && dataDay.values) {\n list = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) || [];\n }\n\n let searchInput = props.hideSearch ? \"\" : ` <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>`;\n let editBtn = \"\";\n\n if (props.editButton) {\n editBtn = `<button class=\"cap-btn-raised cap-btn-sm edit-btn\" input-key=\"${props.editButton.key}\">\n ${props.editButton.label} \n </button> `;\n }\n\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n ${editBtn}\t\n </div>\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n ${searchInput}\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $searchInput = $el.querySelector(\".search-input\");\n let $searchInputClear = $el.querySelector(\".search-input-clear\");\n let $inputBox = $el.querySelector(\".input-box\");\n let $items = list.map((item, j) => {\n let label = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLabel) || dataDay.label || \"__\";\n let $elItem = this.createDataListItem({\n label,\n valueText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameValueText) || \"\",\n subText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSubText) || \"\",\n id: \"list-item-\" + (dataDay.id || j),\n key: \"list-item-\" + (dataDay.id || j),\n tooltip: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameTooltip) || label,\n //colorIcon: \"c-red\",\n link: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLink) || null,\n suffix: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSuffix) || \"\" //value: JSON.stringify(utils.getVarByPath(item, props.varNameInput)) || {}\n\n });\n $inputBox.appendChild($elItem);\n });\n\n if ($searchInput) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $inputs = [];\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n if (props.editButton.onClick) {\n let button = $el.querySelector(\"button.edit-btn\");\n\n if (button && props.editButton) {\n button.addEventListener(\"click\", e => props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el,\n tabSelected\n }));\n }\n\n $items.forEach($i => {\n $el.addEventListener(\"click\", e => {\n props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el,\n tabSelected\n });\n });\n });\n }\n\n return $el;\n },\n\n createDataListItem({\n label = \"\",\n valueText = \"\",\n subText = \"\",\n id = \"\",\n key = \"\",\n tooltip = \"\",\n colorIcon = \"\",\n link = null,\n suffix = null,\n value = \"\"\n }) {\n let tooltipStr = \"\";\n let iconStr = null;\n let linkStr = \"\";\n let str = \"\";\n\n if (tooltip) {\n tooltipStr = `\n <div class=\"mini-input-section--tooltip\">\n ${tooltip}\n </div>`;\n }\n\n if (colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(itemFormated.colorIcon)) {\n iconStr = `<div class=\"mini-input-section--icon\" style=\"background:${colorIcon}\"> </div>`;\n } else {\n iconStr = `<div class=\"mini-input-section--icon ${colorIcon}\"> </div>`;\n }\n }\n\n if (link) {\n linkStr = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${link}\">${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}</a> `;\n }\n\n str += `\n <div class=\"mini-input-section clickeable ${iconStr ? \"has-icon\" : \"\"} \" \n label=\"${label}\" \n data-id=\"${id}\"\n data-key=\"${key}\"\n data-value=\"${value || \"\"}\"\n >\n <label>\n ${iconStr || \"\"}\n\n <div class=\"mini-input-section--titles\">\n <div class=\"mini-input-section--title truncate\">\n ${label}\n </div>\n <div class=\"mini-input-section--subtitle truncate\">\n ${subText}\n </div>\n </div>\n\n <div class=\"mini-input-section--content\" >\n ${valueText}\n </div>\n <div class=\"mini-input-section--suffix\" >\n ${suffix}\n </div>\n\n ${linkStr}\n\n </label>\n ${tooltipStr}\n </div>`;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n createList(props, dataDay) {\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `; //TODO obtener input segun fila\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = null;\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon || \"\"}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let tooltip = \"\";\n let icon = null;\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n\n ${icon}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n <div class=\"mini-input-section--footer\">\n <span class=\"start\"> start</span>\n <span class=\"end\"> end </span>\n </div>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n return $el;\n },\n\n /**\n * Crea InputBox, como elemento Dom\n * un InputBox es un contenedor con una lista de inputs\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputBox(props, dataDay) {\n let value = [];\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `;\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let value_found = value ? value.find(val => val.id == i.id) : null;\n let v = value_found || \"\";\n let inputValue = props.varNameInput && v[props.varNameInput] ? v[props.varNameInput] : v.value;\n let tooltip = \"\";\n let icon = \"\";\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n <input type=\"number\"\n class=\"mini-input\"\n input-id=\"${i.id || \"\"}\"\n input-key=\"${i.key || i.label}\"\n value=\"${inputValue || \"\"}\">\n\n ${icon || \"\"}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputs = $el.querySelectorAll(\"input.mini-input\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n $inputs.forEach(i => this.addKeyDownInputEvents(i, $el, props));\n return $el;\n },\n\n selectInputBoxTab($tab, $el) {\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputSections = $el.querySelectorAll(\".mini-input-section\") || [];\n $tabs.forEach(t => {\n t.classList.remove(\"active\");\n });\n\n if ($tab) {\n $tab.classList.add(\"active\");\n $inputSections.forEach(i => {\n let key = i.getAttribute(\"input-tab-key\");\n\n if (key == $tab.getAttribute(\"tab-key\")) {\n i.classList.remove(\"hide\");\n } else {\n i.classList.add(\"hide\");\n }\n });\n }\n },\n\n /**\n * Crea Checkbox, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputCheckbox(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <label>\n <input type=\"checkbox\" name=\"${props.key || \"\"}\" input-key=\"${props.key || \"\"}\" ${value ? \"checked\" : \"\"}>\n ${props.label}\n </label>\n </div>`);\n return r;\n },\n\n createInputButtonsGroup(props) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"buttons-group\"> </div>\n </div>`);\n let $containerButtonGroup = $container.querySelector(\".buttons-group\");\n let $buttons = [];\n $buttons = props.buttons.map(buttonProp => {\n let buttonStr = `\n <button \n name=\"${buttonProp.key || \"\"}\" \n input-key=\"${buttonProp.key || \"\"}\"\n class=\"cap-btn-outline cap-btn-sm ${buttonProp.isSelected ? \"selected\" : \"\"} \">\n ${buttonProp.label}\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(buttonStr);\n $containerButtonGroup.append($button);\n $button.addEventListener(\"click\", e => {\n if (props.isSelectable) {\n $buttons.forEach($b => $b.classList.remove(\"selected\"));\n $button.classList.add(\"selected\");\n }\n\n buttonProp.onClick({\n props,\n event: e,\n buttonsElements: $buttons\n });\n });\n return $button;\n });\n return $container;\n },\n\n createInputButton(props, dataDay) {\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <button \n name=\"${props.key || \"\"}\"\n input-key=\"${props.key || \"\"}\"\n class=\"cap-btn-outline\">\n ${props.label}\n </button>\n </div>`);\n let button = r.querySelector(\"button\");\n button.addEventListener(\"click\", e => props.onClick({\n props,\n event: e,\n dataDay\n }));\n return r;\n },\n\n addKeyDownInputEvents($input, $inputContainer, props) {\n $input.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n //ENTER\n $input.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n\n if (event.keyCode === 27) {\n //ESC\n $input.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n });\n $input.addEventListener(\"input\", e => {\n if (props.onInput) {\n props.onInput({\n event: e,\n value: e.srcElement.value,\n props,\n $element: $inputContainer\n });\n }\n });\n },\n\n createContextMenu({\n config,\n target,\n $capibaraElem = null,\n evt = null,\n date = null,\n item = null,\n selected = [],\n tabSelected = null,\n left = null,\n top = null,\n name = \"\"\n }) {\n if (config.timeline.contextMenu === undefined || config.timeline.contextMenu.options == undefined) return {\n elem: null,\n isVisible: false\n };\n let className = \"\";\n let style = \"\";\n let strHtml = \"\";\n let leftPosition = null;\n let topPosition = null;\n let isVisible = true;\n let boundRectCapibara = null;\n let gap = 15; //px\n\n if ($capibaraElem) {\n boundRectCapibara = $capibaraElem.getBoundingClientRect();\n }\n\n if (evt && boundRectCapibara) {\n left = evt.clientX;\n top = evt.clientY - boundRectCapibara.top;\n }\n\n if (left) {\n leftPosition = left;\n }\n\n if (top) {\n topPosition = top;\n }\n\n if (leftPosition !== null & topPosition !== null) {\n if (boundRectCapibara) {\n let transformStyle = \"\";\n\n if (topPosition > boundRectCapibara.height * 2 / 6 && topPosition <= boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-50%)`;\n }\n\n if (topPosition > boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-100%)`;\n }\n\n if (leftPosition > boundRectCapibara.width * 4 / 6) {\n transformStyle += `translateX(-100%)`;\n leftPosition -= gap;\n } else {\n leftPosition += gap;\n }\n\n if (transformStyle != \"\") {\n style += ` transform: ${transformStyle};`;\n }\n }\n\n style += `top: ${topPosition}px; left: ${leftPosition}px;`;\n } else {\n className += \"cm-hide\";\n isVisible = false;\n }\n\n strHtml += ` <div class=\"cap-context-menu-container ${className}\">\n <div class=\"cap-context-menu\" style=\"${style}\">\n </div>\n </div>`;\n let $contextMenuContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strHtml);\n let $contextMenu = $contextMenuContainer.querySelector(\".cap-context-menu\");\n let hasSomeoption = false;\n config.timeline.contextMenu.options.forEach(option => {\n if (option.showIf) {\n let show = option.showIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n if (!show) return;\n }\n\n let isEnabled = true;\n let isClickeable = true;\n\n if (option.enableIf) {\n isEnabled = option.enableIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n }\n\n let optionClassName = \"\";\n let strIcon = \"\";\n let label = \"\";\n\n if (!isEnabled) {\n optionClassName += \"is-disabled \";\n }\n\n if (option.isDivider) {\n isClickeable = false;\n optionClassName += \"is-divider \";\n }\n\n if (option.label) {\n label = `<span>${option.label}</span>`;\n }\n\n if (option.icon) {\n strIcon = `<div class=\"cap-context-menu_item_icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"${option.icon}\" />\n </svg>\n </div>`;\n }\n\n let optionStrHtml = `\n <div class=\"cap-context-menu_item ${optionClassName}\">\n ${strIcon}\n ${label}\n </div>`;\n let $option = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(optionStrHtml);\n\n if (isEnabled && isClickeable) {\n $option.addEventListener(\"click\", evtClick => option.onClick({\n config,\n evt: evtClick,\n date,\n item,\n selected,\n tabSelected,\n target\n }));\n } else {\n $option.addEventListener(\"click\", evtClick => {\n evtClick.preventDefault();\n evtClick.stopPropagation();\n });\n }\n\n $contextMenu.append($option);\n hasSomeoption = true;\n });\n return {\n elem: $contextMenuContainer,\n isVisible\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzPzFkODYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSBmcm9tIFwiLi4vdXRpbC9kb21VdGlsc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlsL3V0aWxzXCI7XG5pbXBvcnQgZGF0ZVV0aWxzIGZyb20gXCIuLi91dGlsL2RhdGVVdGlsc1wiO1xuaW1wb3J0IGljb25zIGZyb20gXCIuLi91dGlsL2ljb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqXG4gICAqIENyZWEgZWxlbWVudG8gVGFibGVcbiAgICogQ29udGVuZHLDoSBsb3MgZWxlbWVudG9zIHF1ZSBhcGFyZWNlcmFuIGRlbnRybyBkZSBsYSB0YWJsYSBkZSBwbGFuaWxsYVxuICAgKiBTZSBVc2EgcGFyYSA6XG4gICAqICAgIC0gQWdyZWdhciBiYWNrZ3JvdW5kIGNvbiBwYXRyb24gZXN0aWxvIHRhYmxhXG4gICAqICAgIC0gQWdyZWdhciBkYXlNb3VzZU92ZXIsIGRpdiBxdWUgaW5kaWNhIHBvc2ljaW9uIGRlIG1vdXNlXG4gICAqICAgIC0gQWdyZWdhciBEZXRhaWxEYXksIHBhcmEgZGV0YWxsZXMgZGUgZGF0b3MgZW4gdGFibGFcbiAgICogICAgLSBBZ3JlZ2FyIFNlbGVjdGVkQ29udGFpbmVyLCBwYXJhIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiAgICAtIEFncmVnYXIgRmxvYXRCb3hDb250YWluZXIsIHBhcmEgdmlzdWFsaXphY2lvbiBkZSBkYXRvcyBlbiB0YWJsYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUFnVGFibGUoY29uZmlnKSB7XG4gICAgbGV0IGUgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjYXBpYmFyYVwiIH0pO1xuICAgIGlmIChjb25maWcudGltZWxpbmUuZGFyaykge1xuICAgICAgZS5jbGFzc0xpc3QuYWRkKFwiZGFyay10aGVtZVwiKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmlzU2hvdykge1xuICAgICAgZS5jbGFzc0xpc3QuYWRkKFwiaGVhZGVyLWV4dGVuZGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lICYmIGNvbmZpZy50aW1lbGluZS5mb3JjZU1vYmlsZSA9PT0gdHJ1ZSkge1xuICAgICAgZS5jbGFzc0xpc3QuYWRkKFwiZm9yY2UtbW9iaWxlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIEJhY2tncm91bmQsIHF1ZSBlcyBlbCBmb25kbyBncmlkLCBjb21vIHRhYmxhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIHJlbGFjaW9uYWRvLCBkb25kZSBzZSBjcmUgZWwgYmFja2dyb3VuZFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICByZWRyYXdCYWNrZ3JvdW5kKGNvbmZpZywgJGVsZW0pIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYWNrZ3JvdW5kKGNvbmZpZywgJGVsZW0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIHkgcG9zaWNpb25hIGZvbmRvIGRlIHRhYmxhXG4gICAqIEVzdGUgZm9uZG8gY29udGllbmUgdW4gcGF0cm9uIGRlIENTUyBxdWUgbGUgZGEgbGEgYXBhcmllbmNpYSBkZSB0YWJsYVxuICAgKiBwb3IgbG8gY3VhbCBzZSBkZWJlIHJlcG9zaWNpb25hciBzZWd1biBsYSBmZWNoYSBkZSBpbmljaW8sIHBhcmEgaGFjZXJcbiAgICogY2FsemFyIGxvcyBmaW5lcyBkZSBzZW1hbmFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IFskZWxlbSA9IG51bGxdIC0gRWxlbWVudG8gYmFja2dyb3VuZCwgc2kgZXMgbnVsbCwgbG8gY3JlYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGVsZW1lbnRvIERvbSBCYWNrZ3JvdW5kXG4gICAqL1xuICBjcmVhdGVCYWNrZ3JvdW5kKGNvbmZpZywgJGVsZW0gPSBudWxsKSB7XG4gICAgbGV0IHsgaGVpZ2h0LCB3aWR0aCwgZGF5V2lkdGggfSA9IHV0aWxzLmdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpO1xuXG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLnN0YXJ0KTtcbiAgICBsZXQgZW5kID0gbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLmVuZCk7XG5cbiAgICBlbmQuc2V0VGltZShlbmQuZ2V0VGltZSgpICsgZGF0ZVV0aWxzLmRheUluTWlsbGlzZWNvbmRzKTsgLy8gYWRkIDI0IGhvdXJzXG5cbiAgICBsZXQgZENvcnJlY3RlZCA9IG5ldyBEYXRlKFxuICAgICAgc3RhcnQudmFsdWVPZigpICsgc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwXG4gICAgKTtcbiAgICBsZXQgd2Vla0RheSA9IGRDb3JyZWN0ZWQuZ2V0RGF5KCk7XG4gICAgbGV0IGRpZmZXZWVrRGF5cyA9ICh3ZWVrRGF5IC0gMSkgKiBkYXlXaWR0aCAqIC0xO1xuXG4gICAgJGVsZW0gPSAkZWxlbSB8fCBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJiYWNrZ3JvdW5kLWdyaWRcIiB9KTtcbiAgICAkZWxlbS5zdHlsZVtcImJhY2tncm91bmQtcG9zaXRpb25cIl0gPVxuICAgICAgZGlmZldlZWtEYXlzICsgXCJweCAwLCAwIDAsIFwiICsgZGlmZldlZWtEYXlzICsgXCJweCAwXCI7XG4gICAgJGVsZW0uc3R5bGUud2lkdGggPSB3aWR0aCArIFwicHhcIjtcbiAgICAkZWxlbS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAxICsgXCJweFwiO1xuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBQbG90IENvbnRhaW5lciBWZXJ0aWNhbFxuICAgKiBMb3MgcGxvdHMgc29uIGVsZW1lbnRvcyBxdWUgYWdyZWdhbiBzZWNjaW9uZXMgZGUgZm9uZG8gZW4gbGEgcGxhbmlsbGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gcGxvdFZlcnRpY2FsQ29udGFpbmVyXG4gICAqL1xuICBjcmVhdGVQbG90VmVydGljYWxDb250YWluZXIoY29uZmlnKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcInBsb3QtdmVydGljYWwtY29udGFpbmVyXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3UGxvdFZlcnRpY2FsQ29udGFpbmVyKGNvbmZpZywgJGVsZW0pO1xuICB9LFxuXG4gIGNyZWF0ZVBsb3RIb3Jpem9udGFsQ29udGFpbmVyKGNvbmZpZykge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJwbG90LWhvcml6b250YWwtY29udGFpbmVyXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3UGxvdEhvcml6b250YWxDb250YWluZXIoY29uZmlnLCAkZWxlbSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBwbG90VmVydGljYWxDb250YWluZXIsIHVzYW5kbyBlbGVtZW50byBleGlzdGVudGVcbiAgICogdXNhIHVuIGVsZW1lbnRvIGV4aXN0ZW50ZSBwYXJhIHVzYXIgbGEgZnVuY2lvbiBwYXJhIHJlZGlidWphciBlbCBlbGVtZW50b1xuICAgKlxuICAgKiBMb3MgUGxvdHMgc2UgaW5zZXJ0YW4gY29tbyBkaXZzLCBjb24gcG9zaWNpb24gZXNwZWNpZmljYWRhLFxuICAgKiBjb24gYW5jaG8gZGUgZGlhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIHBsb3RWZXJ0aWNhbENvbnRhaW5lclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBwbG90VmVydGljYWxDb250YWluZXJcbiAgICovXG4gIHJlZHJhd1Bsb3RWZXJ0aWNhbENvbnRhaW5lcihjb25maWcsICRlbGVtKSB7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnBsb3RzICYmIGNvbmZpZy50aW1lbGluZS5wbG90cy52ZXJ0aWNhbCkge1xuICAgICAgbGV0IHsgaGVpZ2h0LCBkYXlXaWR0aCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG5cbiAgICAgIGNvbmZpZy50aW1lbGluZS5wbG90cy52ZXJ0aWNhbC5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIGxldCBkaWZmRGF5cyA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgZGF0ZVV0aWxzLmRpZmZEYXlzKGNvbmZpZy50aW1lbGluZS5zdGFydCwgcC5kYXRlKVxuICAgICAgICApO1xuICAgICAgICBsZXQgbGVmdCA9IGRpZmZEYXlzICogZGF5V2lkdGg7XG4gICAgICAgIGxldCBwbG90ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZXM6IFtcInBsb3QtdmVydGljYWxcIiwgcC5jbGFzc05hbWUgfHwgXCJcIl0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwibWFyZ2luLWxlZnRcIjogbGVmdCArIFwicHhcIixcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAkZWxlbS5hcHBlbmRDaGlsZChwbG90KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgcmVkcmF3UGxvdEhvcml6b250YWxDb250YWluZXIoY29uZmlnLCAkZWxlbSkge1xuICAgICRlbGVtLmlubmVySFRNTCA9IFwiXCI7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5wbG90cyAmJiBjb25maWcudGltZWxpbmUucGxvdHMuaG9yaXpvbnRhbCkge1xuICAgICAgbGV0IHsgd2lkdGgsIGl0ZW1IZWlnaHQgfSA9IHV0aWxzLmdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpO1xuICAgICAgY29uZmlnLnRpbWVsaW5lLnBsb3RzLmhvcml6b250YWwuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICBsZXQgaXRlbSA9IHV0aWxzLmdldEl0ZW1CeUlkKGNvbmZpZywgcC5pZE5vZGUsIHAudHlwZU5vZGUpO1xuICAgICAgICBsZXQgdG9wUG9zaXRpb24gPSB1dGlscy5nZXRQb3NpdGlvbkJ5SXRlbShjb25maWcsIGl0ZW0sIFwicGFyZW50XCIpO1xuICAgICAgICBsZXQgcGxvdCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgICBjbGFzc05hbWVzOiBbXCJwbG90LWhvcml6b250YWxcIiwgcC5jbGFzc05hbWUgfHwgXCJcIl0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwibWFyZ2luLXRvcFwiOiB0b3BQb3NpdGlvbiAqIGl0ZW1IZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgICRlbGVtLmFwcGVuZENoaWxkKHBsb3QpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBDb3JuZXIgSXpxdWllcmRvXG4gICAqIFNlIHVzYSBwYXJhIDpcbiAgICogICAgLSB0aXR1bG9zIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRhdG9zIGRlbCBzaWRlYmFyIGl6cXVpZXJkb1xuICAgKiAgICAtIHRpdHVsb3MgcGFyYSBpbnB1dHMgZGUgaGVhZGVyLCBhYnNvbHV0ZSBhIGxhIGRlcmVjaGFcbiAgICogICAgLSBib3RvbiBwYXJhIG1vc3RyYXIvb2N1bHRhciBzaWRlYmFyIGl6cXVpZXJkb1xuICAgKiAgICAtIHByb21lZGlvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXJcbiAgICovXG4gIGNyZWF0ZUNvcm5lcihjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb3JuZXJcIiB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdDb3JuZXIoJGVsZW0sIGNvbmZpZywgdGFiKTtcbiAgfSxcblxuICByZWRyYXdDb3JuZXIoJGVsZW0sIGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCBsYWJlbHNJbml0aWFsQ29ybmVyID0gY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmluaXRpYWwudmFyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHYpID0+XG4gICAgICAgICAgdi5vbmx5VGFiID09IHVuZGVmaW5lZCB8fCAodi5vbmx5VGFiICYmIHRhYiAmJiB2Lm9ubHlUYWIgPT0gdGFiLmtleSlcbiAgICAgIClcbiAgICAgIC5tYXAoKGQpID0+IGA8c3BhbiBjbGFzcz1cIml0ZW0tY29sXCI+JHtkLmxhYmVsfTwvc3Bhbj5gKVxuICAgICAgLmpvaW4oXCJcIik7XG5cbiAgICBsZXQgbGFiZWxzRXh0ZW5kQ29ybmVyID0gY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmV4dGVuZC52YXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAodikgPT5cbiAgICAgICAgICB2Lm9ubHlUYWIgPT0gdW5kZWZpbmVkIHx8ICh2Lm9ubHlUYWIgJiYgdGFiICYmIHYub25seVRhYiA9PSB0YWIua2V5KVxuICAgICAgKVxuICAgICAgLm1hcCgoZCkgPT4gYDxzcGFuIGNsYXNzPVwiaXRlbS1jb2xcIj4ke2QubGFiZWx9PC9zcGFuPmApXG4gICAgICAuam9pbihcIlwiKTtcblxuICAgIGxldCBsYWJlbHNIZWFkZXJFeHRlbmQgPSBjb25maWcudGltZWxpbmUuaGVhZGVyLmV4dGVuZC5kYXRhXG4gICAgICAubWFwKChkKSA9PiB7XG4gICAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm4gXCJcIjtcblxuICAgICAgICBsZXQgYXZnID0gXCJcIjtcbiAgICAgICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgbGV0IGlzQWNjZW50ID0gZC5pc0FjY2VudDtcblxuICAgICAgICBpZiAoZC5hdmVyYWdlKSB7XG4gICAgICAgICAgYXZnID0gYCA8c3BhbiBjbGFzcz1cImF2ZXJhZ2UgXCI+ICggPHNwYW4+IDxzcGFuIGNsYXNzPVwic3ltYm9sXCI+eMyEPC9zcGFuPiAke2QuYXZlcmFnZX0gPC9zcGFuPikgIDwvc3Bhbj4gICBgO1xuXG4gICAgICAgICAgdG9vbHRpcCA9IGBjYXAtdG9vbHRpcD1cIlByb21lZGlvICR7ZC5sYWJlbH0gOiAke2QuYXZlcmFnZX0gJHtcbiAgICAgICAgICAgIGQuc3VmZml4IHx8IFwiXCJcbiAgICAgICAgICB9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGQuY29sb3IpIHtcbiAgICAgICAgICBpZiAoaXNBY2NlbnQpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLWJhY2tncm91bmRcIiA6IFwiXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHQgXCIgOiBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImlucHV0LXRpdGxlLWNvbnRhaW5lciAke1xuICAgICAgICAgIGlzQWNjZW50ID8gXCJpbnB1dC10aXRsZS0tYWNjZW50XCIgOiBcIlwiXG4gICAgICAgIH0gJHtkLmlzUGVyc2lzdGVudCA/IFwicGVyc2lzdGVudFwiIDogXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAke3Rvb2x0aXB9IGNsYXNzPVwiaW5wdXQtdGl0bGUgJHtjbGFzc05hbWV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F2Z31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIlwiKTtcblxuICAgIGxldCB0b2dnbGVTaWRlYmFyQnRuU3RyaW5nID0gYFxuICAgICAgICAgIDxidXR0b24gdG9nZ2xlLXNpZGViYXIgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZCBjYXAtYnRuLXRvZ2dsZS1zaWRlYmFyIFwiPlxuICAgICAgICAgICR7aWNvbnMuY2hldnJvblJpZ2h0fVxuICAgICAgICAgIDwvYnV0dG9uPiBgO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5oaWRlVG9nZ2xlU2lkZWJhckJ1dHRvbikge1xuICAgICAgdG9nZ2xlU2lkZWJhckJ0blN0cmluZyA9IFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IHRlbXBsYXRlID0gYDxkaXY+XG5cbiAgICAgICAgICAke3RvZ2dsZVNpZGViYXJCdG5TdHJpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItdGl0bGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvdHRvbS10ZXh0XCI+XG4gICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5jb3JuZXIubGVmdC5sYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLWNvcm5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLWNvcm5lci10aXRsZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJib3R0b20tY29udGFpbmVyIGhpZGVcIj5cbiAgICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuY29ybmVyLmluaXRpYWwubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICR7bGFiZWxzSW5pdGlhbENvcm5lcn1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4dGVuZC1jb3JuZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXgtY29ybmVyLXRpdGxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvdHRvbS1jb250YWluZXIgaGlkZVwiPlxuICAgICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5jb3JuZXIuZXh0ZW5kLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm90dG9tLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAke2xhYmVsc0V4dGVuZENvcm5lcn1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1idG4tbmF2LWNvcm5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10aXRsZXNcIj5cbiAgICAgICAgICAgICAgJHtsYWJlbHNIZWFkZXJFeHRlbmR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLWxlZnQgaGlkZS1wcm9ncmVzc1wiPjwvZGl2PlxuXG4gICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHRlbXBsYXRlKTtcblxuICAgICRlbGVtLmlubmVySFRNTCA9IFwiXCI7XG4gICAgJGVsZW0uYXBwZW5kKHIpO1xuXG4gICAgbGV0IHRvZ2dsZVNpZGViYXIgPSAkZWxlbS5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1zaWRlYmFyXVwiKTtcbiAgICBpZiAodG9nZ2xlU2lkZWJhcikge1xuICAgICAgdG9nZ2xlU2lkZWJhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInRvZ2dsZVNpZGViYXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQ29ybmVyIERlcmVjaG9cbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIHRpdHVsb3MgcmVsYWNpb25hZG9zIGNvbiBsb3MgZGF0b3MgZGVsIHNpZGViYXIgRGVyZWNob1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBjb3JuZXJcbiAgICovXG4gIGNyZWF0ZUNvcm5lclJpZ2h0KGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lczogW1wiY29ybmVyXCIsIFwicmlnaHRcIl0gfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3Q29ybmVyUmlnaHQoJGVsZW0sIGNvbmZpZywgdGFiKTtcbiAgfSxcblxuICByZWRyYXdDb3JuZXJSaWdodCgkZWwsIGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCBsYWJlbCA9IFwiXCI7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5sYWJlbCkge1xuICAgICAgYCA8c3Bhbj5cbiAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5sYWJlbH1cbiAgICAgICAgICA8L3NwYW4+YDtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29ybmVyLXRpdGxlXCI+XG4gICAgICAgICR7bGFiZWx9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1yaWdodCBoaWRlLXByb2dyZXNzXCI+PC9kaXY+XG4gICAgYDtcbiAgICAkZWwuaW5uZXJIVE1MID0gc3RyLnRyaW0oKTtcbiAgICBsZXQgJGJ0bkNvbnRhaW5lciA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi1jb250YWluZXJcIik7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5idXR0b25zKSB7XG4gICAgICBjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmJ1dHRvbnMuZm9yRWFjaCgoYnRuKSA9PiB7XG4gICAgICAgIGxldCBpc0VuYWJsZWQgPSBidG4uZ2V0SXNFbmFibGVkID8gYnRuLmdldElzRW5hYmxlZCgpIDogdHJ1ZTtcbiAgICAgICAgaWYgKGlzRW5hYmxlZCkge1xuICAgICAgICAgIGxldCAkYnRuID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29ybmVyLWJ0biBjYXAtYnRuLXJhaXNlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke2J0bi5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IGApO1xuXG4gICAgICAgICAgaWYgKGJ0bi5vbkNsaWNrKSB7XG4gICAgICAgICAgICAkYnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBidG4ub25DbGljayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJGJ0bkNvbnRhaW5lci5hcHBlbmRDaGlsZCgkYnRuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmlucHV0cykge1xuICAgICAgY29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgbGV0ICRpbnB1dCA9IHRoaXMuY3JlYXRlQ29ybmVyUmlnaHRJbnB1dCh7IGlucHV0Q29uZmlnOiBpbnB1dCB9KTtcbiAgICAgICAgJGJ0bkNvbnRhaW5lci5hcHBlbmRDaGlsZCgkYnRuKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJGVsO1xuICB9LFxuXG4gIGNyZWF0ZUNvcm5lclJpZ2h0SW5wdXQoeyBpbnB1dENvbmZpZywgZGF0YURheSA9IG51bGwsIGRheVNlbGVjdGVkID0gbnVsbCB9KSB7XG4gICAgbGV0IHIgPSBudWxsO1xuICAgIHN3aXRjaCAoaW5wdXRDb25maWcudHlwZSkge1xuICAgICAgY2FzZSBcImF1dG9jb21wbGV0ZS1jcnVkXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUNvcm5lclJpZ2h0SW5wdXRBdXRvY29tcGxldGVDcnVkKHtcbiAgICAgICAgICBpbnB1dENvbmZpZyxcbiAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9LFxuXG4gIGNyZWF0ZUNvcm5lclJpZ2h0SW5wdXRBdXRvY29tcGxldGVDcnVkKHtcbiAgICBpbnB1dENvbmZpZyxcbiAgICBkYXRhRGF5LFxuICAgIGRheVNlbGVjdGVkLFxuICB9KSB7XG4gICAgbGV0IGVsZW0gPSBcInRlc3RcIjtcbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIZWFkZXIgVG9wXG4gICAqIFNlIHVzYSBwYXJhIDpcbiAgICogICAgLSBNYW5lam8gZGUgdGFic1xuICAgKiAgICAtIEJvdG9uZXMgZGUgbmF2ZWdhY2nDs24geSBzZWxlY2Npw7NuIGRlIGZlY2hhXG4gICAqICAgIC0gQm90b24gdG9nZ2xlIERhcmsgbW9kZVxuICAgKiAgICAtIEJvdG9uIHRvZ2dsZSBIZWFkZXIgZXh0ZW5kZWRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb21cbiAgICovXG5cbiAgY3JlYXRlSGVhZGVyVG9wKGNvbmZpZywgdGFiU2VsZWN0ZWQgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3SGVhZGVyVG9wKGNvbmZpZywgdGFiU2VsZWN0ZWQsIGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgfSxcblxuICByZWRyYXdIZWFkZXJUb3AoY29uZmlnLCB0YWJTZWxlY3RlZCA9IG51bGwsICRlbGVtKSB7XG4gICAgbGV0IHN0ciA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdG9wXCI+YDtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUudGFicykge1xuICAgICAgbGV0IHNob3dUYWJzID0gdHJ1ZTtcblxuICAgICAgaWYgKGNvbmZpZy50aW1lbGluZS50YWJzLmZpbHRlcigodCkgPT4gIXQuaXNIaWRkZW4pLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHNob3dUYWJzID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG93VGFicykge1xuICAgICAgICBjb25zdCBmb3JjZU1vYmlsZSA9IGNvbmZpZy50aW1lbGluZSAmJiBjb25maWcudGltZWxpbmUuZm9yY2VNb2JpbGUgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IHRhYlNlbGVjdENsYXNzZXMgPSBmb3JjZU1vYmlsZVxuICAgICAgICAgID8gXCJ0YWItc2VsZWN0LWNvbnRhaW5lciBjLWQtbW9iaWxlLWZsZXhcIlxuICAgICAgICAgIDogXCJ0YWItc2VsZWN0LWNvbnRhaW5lciBjLWQtZGVza3RvcC1ub25lIGMtZC1tb2JpbGUtZmxleFwiO1xuICAgICAgICBjb25zdCB0YWJzQ29udGFpbmVyQ2xhc3NlcyA9IGZvcmNlTW9iaWxlXG4gICAgICAgICAgPyBcInRhYnMtY29udGFpbmVyIGMtZC1tb2JpbGUtbm9uZVwiXG4gICAgICAgICAgOiBcInRhYnMtY29udGFpbmVyIGMtZC1kZXNrdG9wLWZsZXggYy1kLW1vYmlsZS1ub25lXCI7XG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCIke3RhYlNlbGVjdENsYXNzZXN9XCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwidGFicy1zZWxlY3RcIiA+YDtcblxuICAgICAgICBjb25maWcudGltZWxpbmUudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICBpZiAoIXRhYi5pc0hpZGRlbikge1xuICAgICAgICAgICAgc3RyICs9IGAgPG9wdGlvbiAke1xuICAgICAgICAgICAgICB0YWIgPT0gdGFiU2VsZWN0ZWQgPyAnc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6IFwiXCJcbiAgICAgICAgICAgIH0gdmFsdWU9XCIke3RhYi5pZH1cIj4gJHt0YWIubGFiZWx9IDwvb3B0aW9uPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdHIgKz0gYDwvc2VsZWN0PiA8L2Rpdj5gO1xuXG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCIke3RhYnNDb250YWluZXJDbGFzc2VzfVwiPmA7XG5cbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCF0YWIuaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHN0ciArPSBgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFiICR7dGFiLmRpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn0gICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhYiA9PSB0YWJTZWxlY3RlZCA/IFwiYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAke3RhYi5jb2xvcn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCIke3RhYi5jb2xvcn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt0YWIuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhYi50b29sdGlwID8gJ2NhcC10b29sdGlwPVwiJyArIHRhYi50b29sdGlwICsgJ1wiJyA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ke3RhYi5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICR7dGFiLmljb24gfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGFiU2VsZWN0ZWQpIHtcbiAgICAgIGlmICh0YWJTZWxlY3RlZC5sZWdlbmRzKSB7XG4gICAgICAgIHN0ciArPSBgIFxuICAgICAgICA8YnV0dG9uIHRvZ2dsZS1sZWdlbmRzIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWQgXCI+XG4gICAgICAgICAgJHtpY29ucy50b2dnbGVMZWdlbmRzfVxuICAgICAgICA8L2J1dHRvbj4gXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZHMtY29udGFpbmVyIGZvcmNlLW1vYmlsZS1zdHlsZSBoaWRlXCI+IGA7XG5cbiAgICAgICAgdGFiU2VsZWN0ZWQubGVnZW5kcy5mb3JFYWNoKChsZWdlbmQpID0+IHtcbiAgICAgICAgICBsZXQgY29sb3JDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNvbG9yQmcgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IobGVnZW5kLmNvbG9yKSkge1xuICAgICAgICAgICAgY29sb3JCZyA9IFwiYmFja2dyb3VuZDpcIiArIGxlZ2VuZC5jb2xvcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sb3JDbGFzcyA9IGxlZ2VuZC5jb2xvciA/IGxlZ2VuZC5jb2xvciArIFwiLS1iYWNrZ3JvdW5kXCIgOiBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxlZ2VuZCAke2xlZ2VuZC5hY3RpdmUgPyBcImFjdGl2ZVwiIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7bGVnZW5kLmtleX1cIlxuICAgICAgICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQudG9vbHRpcCA/IGBjYXAtdG9vbHRpcD1cIiR7bGVnZW5kLnRvb2x0aXB9XCJgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgIH0gPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tbGVnZW5kICR7Y29sb3JDbGFzc30gJHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnNoYXBlXG4gICAgICAgICAgICAgICAgICB9XCIgc3R5bGU9XCIke2NvbG9yQmd9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ke2xlZ2VuZC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyICs9IGA8L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0ciArPSBgXG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG5cblxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLXByZXYgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZCBjLWQtbW9iaWxlLW5vbmVcIj5cbiAgICAgICAgICAgICAke2ljb25zLmFycm93TGVmdH1cbiAgICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufSBcbiAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLWNhbGVuZGFyIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgICR7aWNvbnMuY2FsZW5kYXJ9XG4gICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLW5leHQgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZCBjLWQtbW9iaWxlLW5vbmVcIj5cbiAgICAgICAgICAgICR7aWNvbnMuYXJyb3dSaWdodH1cbiAgICAgICAgICAgICR7aWNvbnMubG9hZGluZ0ljb259XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uIHRvZ2dsZS1kYXJrIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taGVhZGVyIGMtZC1tb2JpbGUtbm9uZSAke1xuICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLndpdGhEYXJrVG9nZ2xlID09IGZhbHNlID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfVwiPlxuICAgICAgICAgICAgJHtpY29ucy5kYXJrfVxuICAgICAgICAgICAgJHtpY29ucy5saWdodH1cbiAgICAgICAgICA8L2J1dHRvbj5gO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgICBzdHIgKz0gYDxidXR0b24gdG9nZ2xlLWhlYWRlciBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkXCI+XG4gICAgICAgICAgJHtpY29ucy5jaGV2cm9uRG93bn1cbiAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgIH1cblxuICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCJidXR0b24tcmlnaHQtY29udGFpbmVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgLypcbiAgICAgICAgICBgXG4gICAgICAgICAgPGJ1dHRvbiB0b2dnbGUtc2lkZWJhci1yaWdodCBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkXCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cIndpZHRoOjI0cHg7aGVpZ2h0OjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xNS40MSwxNi41OEwxMC44MywxMkwxNS40MSw3LjQxTDE0LDZMOCwxMkwxNCwxOEwxNS40MSwxNi41OFpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICAqL1xuXG4gICAgbGV0ICRyID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgICRlbGVtLnJlcGxhY2VXaXRoKCRyKTtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUuaGVhZGVyLnJpZ2h0QnV0dG9ucykge1xuICAgICAgbGV0ICRidXR0b25Db250YWluZXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbi1yaWdodC1jb250YWluZXJcIik7XG4gICAgICBjb25maWcudGltZWxpbmUuaGVhZGVyLnJpZ2h0QnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ2xhc3MgPSBidXR0b24uY3VzdG9tQ2xhc3MgfHwgXCJcIjtcbiAgICAgICAgbGV0IGhhc0JhZGdlID0gZmFsc2U7XG4gICAgICAgIGlmIChidXR0b24uaGFzQmFkZ2UpIHtcbiAgICAgICAgICBoYXNCYWRnZSA9IGJ1dHRvbi5oYXNCYWRnZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHIgPSBgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkICR7XG4gICAgICAgICAgaGFzQmFkZ2UgPyBcImNhcC1idG4taGFzLWJhZGdlXCIgOiBcIlwiXG4gICAgICAgIH0gJHtjdXN0b21DbGFzc31cIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiJHtidXR0b24uaWNvbn1cIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICBsZXQgJGJ1dHRvbiA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICAgICAgJGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dCkgPT4gYnV0dG9uLm9uQ2xpY2soeyBldnQgfSkpO1xuICAgICAgICAkYnV0dG9uQ29udGFpbmVyLmFwcGVuZCgkYnV0dG9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCAkdG9nZ2xlRGFyayA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCJbdG9nZ2xlLWRhcmtdXCIpO1xuICAgIGlmICgkdG9nZ2xlRGFyaykge1xuICAgICAgJHRvZ2dsZURhcmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwidG9nZ2xlRGFya1wiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCAkYnRuQ2FsZW5kYXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiW2NhcC1idG4tY2FsZW5kYXJdXCIpO1xuICAgIGlmICgkYnRuQ2FsZW5kYXIpIHtcbiAgICAgICRidG5DYWxlbmRhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHggPSBlLng7XG4gICAgICAgIGxldCB5ID0gZS55O1xuICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrQ2FsZW5kYXJJY29uXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDogeyB4LCB5IH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCAkYnRuVG9nZ2xlSGVhZGVyID0gJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtaGVhZGVyXVwiKTtcbiAgICBpZiAoJGJ0blRvZ2dsZUhlYWRlcikge1xuICAgICAgJGJ0blRvZ2dsZUhlYWRlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJ0b2dnbGVIZWFkZXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKlxuICAgICRyLnF1ZXJ5U2VsZWN0b3IoXCJbdG9nZ2xlLXNpZGViYXItcmlnaHRdXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBlID0+IHtcbiAgICAgICRyLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwidG9nZ2xlU2lkZWJhclJpZ2h0XCIsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICB9KSk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgICRyLnF1ZXJ5U2VsZWN0b3IoXCJbY2FwLWJ0bi1wcmV2XVwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImhlYWRlclByZXZcIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICRyLnF1ZXJ5U2VsZWN0b3IoXCJbY2FwLWJ0bi1jYWxlbmRhcl1cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJoZWFkZXJDYWxlbmRhclwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIltjYXAtYnRuLW5leHRdXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiaGVhZGVyTmV4dFwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgbGV0ICR0b2dnbGVMZWdlbmRzQnRuID0gJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtbGVnZW5kc11cIik7XG4gICAgaWYgKCR0b2dnbGVMZWdlbmRzQnRuKSB7XG4gICAgICAkdG9nZ2xlTGVnZW5kc0J0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0ICRsZWdlbmRDb250YWluZXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiLmxlZ2VuZHMtY29udGFpbmVyXCIpO1xuICAgICAgICBpZiAoJGxlZ2VuZENvbnRhaW5lcikge1xuICAgICAgICAgICRsZWdlbmRDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImhpZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgICRyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubGVnZW5kXCIpLmZvckVhY2goKCRsZWdlbmQpID0+IHtcbiAgICAgICRsZWdlbmQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBsZXQgbGVnZW5kU2VsZWN0ZWQgPSB0YWJTZWxlY3RlZC5sZWdlbmRzLmZpbmQoXG4gICAgICAgICAgICAodGFiKSA9PiB0YWIua2V5ID09PSBrZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChsZWdlbmRTZWxlY3RlZCkge1xuICAgICAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0TGVnZW5kSGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgbGVnZW5kOiBsZWdlbmRTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICRsZWdlbmQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiOm5vdCguZGlzYWJsZWQpXCIpLmZvckVhY2goKCR0YWIpID0+IHtcbiAgICAgICR0YWIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBsZXQgdGFiU2VsZWN0ZWQgPSBjb25maWcudGltZWxpbmUudGFicy5maW5kKCh0YWIpID0+IHRhYi5pZCA9PSBrZXkpO1xuICAgICAgICAgIGlmICh0YWJTZWxlY3RlZCkge1xuICAgICAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0VGFiSGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgdGFiOiB0YWJTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvckFsbChcIi50YWJzLXNlbGVjdDpub3QoLmRpc2FibGVkKVwiKS5mb3JFYWNoKCgkdGFiKSA9PiB7XG4gICAgICAkdGFiLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IHBhcnNlRmxvYXQoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcblxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgbGV0IHRhYlNlbGVjdGVkID0gY29uZmlnLnRpbWVsaW5lLnRhYnMuZmluZCgodGFiKSA9PiB0YWIuaWQgPT0ga2V5KTtcbiAgICAgICAgICBpZiAodGFiU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNlbGVjdFRhYkhlYWRlclwiLCB7XG4gICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgIHRhYjogdGFiU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkcjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIZWFkZXJcbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIE1vc3RyYXIgZmVjaGFzIGVuIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbVxuICAgKi9cbiAgY3JlYXRlSGVhZGVyKGNvbmZpZykge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiaGVhZGVyXCIpO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd0hlYWRlcihjb25maWcsICRlbGVtKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIEhlYWRlciwgdXNhZG8gcGFyYSByZWRpYnVqYXJcbiAgICogdXRpbGl6YSAkZWxlbSBjb21vIGVsZW1lbnRvIGRvbSBkb25kZSByZWNyZWFybG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gRG9tIGRvbmRlIGNyZWEgSGVhZGVyXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tXG4gICAqL1xuICByZWRyYXdIZWFkZXIoY29uZmlnLCAkZWxlbSkge1xuICAgIGxldCBkYXRlc1RyZWUgPSBkYXRlVXRpbHMuZ2V0RGF0ZVRyZWVSYW5nZShcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5zdGFydCksXG4gICAgICBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKVxuICAgICk7XG5cbiAgICBsZXQgc3RyID0gYDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+IGA7XG5cbiAgICBPYmplY3Qua2V5cyhkYXRlc1RyZWUpLmZvckVhY2goKGtleVkpID0+IHtcbiAgICAgIGxldCB5ZWFyID0gZGF0ZXNUcmVlW2tleVldO1xuICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiYWduby1jYWxlbmRhcmlvXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWdubyBoaWRlXCI+JHtrZXlZfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc2VzXCI+YDtcblxuICAgICAgT2JqZWN0LmtleXMoeWVhcikuZm9yRWFjaCgoa2V5TSkgPT4ge1xuICAgICAgICBsZXQgbW9udGggPSBkYXRlc1RyZWVba2V5WV1ba2V5TV07XG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCJtZXMtY2FsZW5kYXJpb1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzICR7XG4gICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobW9udGgpLmxlbmd0aCA8IDRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJtZXMtcmVkdWNlZCBtZXMtcmVkdWNlZC1cIiArIE9iamVjdC5rZXlzKG1vbnRoKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt1dGlscy5nZXRNb250aEJ5UG9zaXRpb24oa2V5TSl9ICR7a2V5WX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFzXCI+YDtcbiAgICAgICAgT2JqZWN0LmtleXMobW9udGgpLmZvckVhY2goKGtleUQpID0+IHtcbiAgICAgICAgICBsZXQgZGF5ID0gZGF0ZXNUcmVlW2tleVldW2tleU1dW2tleURdO1xuICAgICAgICAgIGxldCBpc1dlZWtlbmQgPSBkYXkuaXNXZWVrZW5kO1xuICAgICAgICAgIGxldCBpc1RvZGF5ID0gZGF5LmlzVG9kYXk7XG4gICAgICAgICAgbGV0IGhhc0FsZXJ0ID0gY29uZmlnLnRpbWVsaW5lLmhlYWRlci5kYXRlSGFzQWxlcnRcbiAgICAgICAgICAgID8gY29uZmlnLnRpbWVsaW5lLmhlYWRlci5kYXRlSGFzQWxlcnQoZGF5KVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBsZXQgZGF0ZSA9IGRhdGVVdGlscy5mb3JtYXREYXRlKGRheS5kYXRlKTtcbiAgICAgICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJkaWEtY2FsZW5kYXJpbyBcbiAgICAgICAgICAgICR7aXNUb2RheSA/IFwidG9kYXlcIiA6IFwiXCJ9XG4gICAgICAgICAgICAke2lzV2Vla2VuZCA/IFwid2Vla2VuZFwiIDogXCJcIn1cbiAgICAgICAgICAgICR7aGFzQWxlcnQgPyBcImhhcy1hbGVydFwiIDogXCJcIn1cbiAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmRhdGVTZWxlY3RhYmxlID8gXCJpcy1jbGlja2VhYmxlXCIgOiBcIlwifVxuICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuZGF0ZVdpdGhDb250ZXh0TWVudSA/IFwiaXMtY2xpY2tlYWJsZVwiIDogXCJcIn1cbiAgICAgICAgICAgIFwiIGRhdGU9XCIke2RhdGV9XCI+JHtrZXlEfTwvZGl2PmA7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHIgKz0gYDwvZGl2PjwvZGl2PmA7XG4gICAgICB9KTtcbiAgICAgIHN0ciArPSBgPC9kaXY+IDwvZGl2PmA7XG4gICAgfSk7XG5cbiAgICBzdHIgKz0gYDwvZGl2PmA7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICAkZWxlbS5hcHBlbmQoZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpKTtcblxuICAgIGxldCAkZGF5cyA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGlhLWNhbGVuZGFyaW9bZGF0ZV1cIik7XG4gICAgJGRheXMuZm9yRWFjaCgoJGRpYSkgPT4ge1xuICAgICAgaWYgKGNvbmZpZy50aW1lbGluZS5kYXRlV2l0aENvbnRleHRNZW51KSB7XG4gICAgICAgICRkaWEuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIChldnQpID0+IHtcbiAgICAgICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY29udGV4dE1lbnVEYXRlXCIsIHtcbiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICRlbGVtOiAkZGlhLFxuICAgICAgICAgICAgICAgIGRhdGU6ICRkaWEuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKSxcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICBjbGllbnRZOiBldnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmRhdGVTZWxlY3RhYmxlKSB7XG4gICAgICAgICRkaWEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldnQpID0+IHtcbiAgICAgICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tEYXRlXCIsIHtcbiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICRlbGVtOiAkZGlhLFxuICAgICAgICAgICAgICAgIGRhdGU6ICRkaWEuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLm9uTW91c2VPdmVyRGF0ZSkge1xuICAgICAgICAkZGlhLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5vbk1vdXNlT3ZlckRhdGUoe1xuICAgICAgICAgICAgJGRpYSxcbiAgICAgICAgICAgICRlbGVtLFxuICAgICAgICAgICAgZGF0ZTogJGRpYS5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpLFxuICAgICAgICAgICAgZXZ0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcudGltZWxpbmUub25Nb3VzZU91dERhdGUpIHtcbiAgICAgICAgJGRpYS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5vbk1vdXNlT3V0RGF0ZSh7XG4gICAgICAgICAgICAkZGlhLFxuICAgICAgICAgICAgJGVsZW0sXG4gICAgICAgICAgICBkYXRlOiAkZGlhLmdldEF0dHJpYnV0ZShcImRhdGVcIiksXG4gICAgICAgICAgICBldnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEhlYWRlciBleHRlbmRlZFxuICAgKiBTZSB1c2EgcGFyYSA6XG4gICAqICAgIC1Nb3N0cmFyIGlucHV0cyB5IGRhdG9zIHBhcmEgZmVjaGFzIGVuIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBoZWFkZXJFeHRlbmRlZFxuICAgKi9cbiAgY3JlYXRlSGVhZGVyRXh0ZW5kZWQoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmVuYWJsZWQgPT0gZmFsc2UpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGRhdGVzID0gZGF0ZVV0aWxzLmdldERhdGVSYW5nZShcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5zdGFydCksXG4gICAgICBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKVxuICAgICk7XG4gICAgbGV0IHN0ciA9IGA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZFwiPmA7XG5cbiAgICBjb25maWcudGltZWxpbmUuaGVhZGVyLmV4dGVuZC5kYXRhLmZvckVhY2goKGQsIGRfaW5kZXgpID0+IHtcbiAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm4gXCJcIjtcblxuICAgICAgbGV0IGlzUGVyc2lzdGVudCA9IGQuaXNQZXJzaXN0ZW50O1xuICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiaW5wdXQtbGlzdCAke2lzUGVyc2lzdGVudCA/IFwicGVyc2lzdGVudFwiIDogXCJcIn1cIj5gO1xuICAgICAgc3RyICs9IGRhdGVzXG4gICAgICAgIC5tYXAoKGRhdGUpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgIGxldCBpc0Z1dHVyZSA9IGRhdGVVdGlscy5pc0Z1dHVyZShkYXRlKTtcbiAgICAgICAgICBsZXQgaXNUb2RheSA9IGRhdGVVdGlscy5pc1RvZGF5KGRhdGUpO1xuXG4gICAgICAgICAgaWYgKGQuZGF0YSkge1xuICAgICAgICAgICAgbGV0IGRhdGFGb3VuZGVkID0gZC5kYXRhLmZpbmQoKGRhdGFJbnB1dCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZGF0ZVV0aWxzLmlzU2FtZURhdGUoXG4gICAgICAgICAgICAgICAgbmV3IERhdGUoZGF0YUlucHV0LmRhdGUgKyBcIlQwMDowMDowMFwiKSxcbiAgICAgICAgICAgICAgICBkYXRlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkYXRhRm91bmRlZCkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFGb3VuZGVkLnZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBkYXRhRm91bmRlZC5jbGFzc05hbWUgKyBcIiBcIiB8fCBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGQuZWRpdGFibGUgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAoaXNGdXR1cmUgJiYgZC5lZGl0YWJsZUZ1dHVyZSA9PSBmYWxzZSkgfHxcbiAgICAgICAgICAgIChpc1RvZGF5ICYmIGQuZWRpdGFibGVUb2RheSA9PSBmYWxzZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRlPVwiJHtkYXRlVXRpbHMuZm9ybWF0RGF0ZShkYXRlKX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD1cIiR7ZF9pbmRleH1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiAke2NsYXNzTmFtZX0gJHtkYXRlLnZhck5hbWUgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmVkaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZGlhLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICBkYXRlPVwiJHtkYXRlVXRpbHMuZm9ybWF0RGF0ZShkYXRlKX1cIiBcbiAgICAgICAgICAgICAgICAgIGluZGV4PVwiJHtkX2luZGV4fVwiIFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItaW5wdXQgXG4gICAgICAgICAgICAgICAgICAke2RhdGUudmFyTmFtZX0gJHtkLmNvbG9yID8gXCJjLVwiICsgZC5jb2xvciArIFwiLS10ZXh0XCIgOiBcIlwifVwiIFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifSBcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHt2YWx1ZX1cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICB9KTtcblxuICAgIHN0ciArPSBgPC9kaXY+YDtcblxuICAgIGxldCByID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuXG4gICAgci5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXQuaGVhZGVyLWlucHV0XCIpLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGRhdGUgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKTtcbiAgICAgICAgbGV0IGluZGV4ID0gZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZShcImluZGV4XCIpO1xuICAgICAgICBsZXQgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgICAgIGxldCB0eXBlRGF0YSA9IGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmRhdGFbaW5kZXhdO1xuXG4gICAgICAgIC8vcmVmcmVzaCBjb25maWcgdmFsdWVcbiAgICAgICAgbGV0IGRhdGEgPSB0eXBlRGF0YS5kYXRhLmZpbmQoKGQpID0+XG4gICAgICAgICAgZGF0ZVV0aWxzLmlzU2FtZURhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShkLmRhdGUgKyBcIlQwMDowMDowMFwiKSxcbiAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUgKyBcIlQwMDowMDowMFwiKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHlwZURhdGEuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2hhbmdlSW5wdXRIZWFkZXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICAgIHR5cGVEYXRhOiB0eXBlRGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXIgU2lkZWJhciBJenF1aWVyZG9cbiAgICogICAgLSBNYW5lamEgaXRlbXMgY29tbyBhcmJvbCBkZSAyIG5pdmVsZXMgKHBhcmVudCwgY2hpbGRyZW4pXG4gICAqICAgIC0gRWwgc2lkZWJhciBzZSBkaXZpZGUgZW4gbmF2TGlzdCAtIEluaXRpYWxOYXYgLSBleHRlbmRlZE5hdiAtIEJ0bk5hdlxuICAgKiAgICAtIFNlIGFncmVnYSBpdGVtRGV0YWlsLCBwYXJhIGRldGFsbGVzIGRlIGl0ZW1zXG4gICAqXG4gICAqXG4gICAqIFRPRE86IHBhcmEgZXZpdGFyIGluY3J1c3RhciBsYXMgaWRzIGVuIGxvcyBpbnB1dHMsIHNlIGRlYmVuIGNyZWFyXG4gICAqIGxvcyBub2RvcyB1bm8gcG9yIHVubyBjb21vIGVsZW1lbnRvIERPTSwgeSBhZ3JlZ2FybGVzIGxvcyBldmVudG9zIGRpcmVjdGFtZW50ZVxuICAgKiBhaG9yYSBzZSBoYWNlIHNlbGVjY2lvbmFuZG8gdG9kb3MgbG9zIGlucHV0cyBjb24gcXVlcnlTZWxlY3RvckFsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBTaWRlYmFyIEl6cXVpZXJkb1xuICAgKi9cbiAgY3JlYXRlTmF2TGVmdChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJsZWZ0XCIgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBpenF1aWVyZG8sIHVzYWRvIHBhcmEgcmVkaWJ1amFyXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgaXpxdWllcmRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIG5hdkxlZnRcbiAgICovXG5cbiAgcmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IG5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpbml0aWFsTmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGV4TmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGJ0bk5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIGlzRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbmZpZy5kYXRhLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGhhc0J0biA9ICEhZC5vbkNsaWNrRGV0YWlsQnV0dG9uO1xuICAgICAgY29uc3QgaXNNb2JpbGUgPSB1dGlscy5jaGVja0lzTW9iaWxlKGNvbmZpZyk7XG4gICAgICBjb25zdCBoYXNDbGlja0xhYmVsVG9EZXRhaWwgPVxuICAgICAgICAhIWQub25DbGlja0RldGFpbEJ1dHRvbiAmJiAhIWQuY2xpY2tMYWJlbFRvRGV0YWlsO1xuICAgICAgLy8gZW4gbW9iaWxlIGNvbiBjbGlja0xhYmVsVG9EZXRhaWw6IG5vIG1vc3RyYXIgYm90w7NuLCBlbCBub21icmUgZXMgY2xpY2tlYWJsZVxuICAgICAgY29uc3Qgc2hvd0RldGFpbEJ0biA9IGhhc0J0biAmJiAhKGlzTW9iaWxlICYmIGhhc0NsaWNrTGFiZWxUb0RldGFpbCk7XG4gICAgICBjb25zdCBkZXRhaWxCdG5Db250ZW50ID1cbiAgICAgICAgc2hvd0RldGFpbEJ0biAmJiBpc01vYmlsZVxuICAgICAgICAgID8gKGQuaWNvbkRldGFpbEJ1dHRvbiB8fCBpY29ucy5pbmZvT3V0bGluZSlcbiAgICAgICAgICA6IHNob3dEZXRhaWxCdG5cbiAgICAgICAgICAgID8gKGQubGFiZWxEZXRhaWxCdXR0b24gfHwgXCJcIilcbiAgICAgICAgICAgIDogXCJcIjtcbiAgICAgIGNvbnN0IGRldGFpbEJ0biA9IHNob3dEZXRhaWxCdG5cbiAgICAgICAgPyBgPGJ1dHRvbiBjbGFzcz1cImRldGFpbC1idG4gJHtpc01vYmlsZSA/IFwiZGV0YWlsLWJ0bi1pY29uXCIgOiBcIlwifVwiIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCIgdHlwZS1ub2RlPVwiJHtcbiAgICAgICAgICAgIGQudHlwZSB8fCBcIlwiXG4gICAgICAgICAgfVwiICR7aXNNb2JpbGUgJiYgZC5sYWJlbERldGFpbEJ1dHRvbiA/IGB0aXRsZT1cIiR7ZC5sYWJlbERldGFpbEJ1dHRvbi5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKX1cImAgOiBcIlwifT5cbiAgICAgICAgJHtkZXRhaWxCdG5Db250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gXG4gICAgICAgIDogXCJcIjtcblxuICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtXCI+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tY29udGFpbmVyIHBhcmVudFwiPmA7XG5cbiAgICAgIGlmIChkLmNoaWxkcmVuKSB7XG4gICAgICAgIG5hdkxpc3QgKz0gYDxidXR0b24gY2xhc3M9XCJ0cmVlLWljb24gJHtcbiAgICAgICAgICBkLmlzQ2xvc2VkID8gXCJcIiA6IFwiY2FwLXJvdGF0ZVwiXG4gICAgICAgIH1cIiBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCIgPlxuICAgICAgICAke2ljb25zLmNoZXZyb25Eb3dufVxuICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgfVxuXG4gICAgICBuYXZMaXN0ICs9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZSB0cnVuY2F0ZSBmdWxsLXdpZHRoICR7XG4gICAgICAgICAgICBkLmNsaWNrZWFibGUgfHwgaGFzQ2xpY2tMYWJlbFRvRGV0YWlsID8gXCJjbGlja2VhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgfSAke2hhc0NsaWNrTGFiZWxUb0RldGFpbCA/IFwiY2xpY2stbGFiZWwtdG8tZGV0YWlsXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICR7ZC5uYXZPdmVyID8gXCJob3ZlcmFibGVcIiA6IFwiXCJ9IFwiIGl0ZW0taWQ9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCB8fCAtMVxuICAgICAgICAgICAgICAgICAgICAgIH1cIiB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgJHtkLmxhYmVsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLWJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgJHtkZXRhaWxCdG59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZHJlbi1pdGVtcyAke1xuICAgICAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICAgICAgfSBcIiBjaGlsZC1saXN0PVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIGxldCBsaWdodENvbG9yID0gbnVsbDtcbiAgICAgICAgICBsZXQgbGlnaHRDbGFzcyA9IG51bGw7XG4gICAgICAgICAgbGV0IGxpZ2h0U3BhbiA9IFwiXCI7XG4gICAgICAgICAgbGV0IG11bHRpQnV0dG9uc0RldGFpbFRtcGwgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGMubGlnaHQpKSB7XG4gICAgICAgICAgICAgIGxpZ2h0Q29sb3IgPSBjLmxpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGlnaHRDbGFzcyA9IGMubGlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGxpZ2h0U3BhbiA9IGA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWdodCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0Q2xhc3MgPyBsaWdodENsYXNzICsgXCItbGlnaHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRDb2xvciA/IFwiLS1saWdodC1jb2xvcjpcIiArIGxpZ2h0Q29sb3IgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjLmhhc011bHRpYnV0dG9ucykge1xuICAgICAgICAgICAgbGV0IGljb25Gb3JtYXR0ZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMgJiZcbiAgICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmluaXRpYWwubXVsdGlidXR0b25zLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpY29uRm9ybWF0dGVyID1cbiAgICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMuaWNvbkZvcm1hdHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gaWNvbkZvcm1hdHRlclxuICAgICAgICAgICAgICA/IGljb25Gb3JtYXR0ZXIoeyBpdGVtOiBjLCBjb25maWcgfSlcbiAgICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgICAgICBtdWx0aUJ1dHRvbnNEZXRhaWxUbXBsID0gYDxidXR0b24gY2xhc3M9XCJtdWx0aWJ1dHRvbnMtYnRuXCIgXG4gICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCIgXG4gICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9PlxuICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH0gXG4gICAgICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkLW5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1pdGVtLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTksMTVMMTMsMjFMMTEuNTgsMTkuNThMMTUuMTcsMTZINFY0SDZWMTRIMTUuMTdMMTEuNTgsMTAuNDJMMTMsOUwxOSwxNVpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAke2xpZ2h0U3Bhbn1cbiAgICAgICAgICAgICAgICAgICAgJHttdWx0aUJ1dHRvbnNEZXRhaWxUbXBsfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS10aXRsZSAke2MuY2xpY2tlYWJsZSA/IFwiY2xpY2tlYWJsZVwiIDogXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMubmF2T3ZlciA/IFwiaG92ZXJhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtjLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBuYXZMaXN0ICs9IGA8L2Rpdj5gO1xuXG4gICAgICAvL2luaXRpYWxcbiAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aE5hdikge1xuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZC52YWx1ZXMsIHYudmFyTmFtZSk7XG5cbiAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLnJvdW5kKHZhbHVlLCB2LnJvdW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICBjYXNlIFwiaG91clwiOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgIGxldCBoaFZhbHVlID0gdmFsdWVbMF07XG4gICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaW5pdGlhbE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gJHtcbiAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9XCIgY2hpbGQ9XCIke2QuaWQgfHwgLTF9XCI+YDtcblxuICAgICAgICAgIGlmIChjLndpdGhOYXYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGhWYWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vRXh0XG4gICAgICBleE5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJleC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aEV4TmF2KSB7XG4gICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5leHRlbmQudmFycy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGQudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgIGlmICh2LnJvdW5kICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdXRpbHMucm91bmQodmFsdWUsIHYucm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgc3dpdGNoICh2LmlucHV0KSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2hoVmFsdWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtkLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7bW1WYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICBkLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICBpZiAoYy5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgICAgIGV4TmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWV4LW5hdi1pdGVtICR7XG4gICAgICAgICAgICBkLmlzQ2xvc2VkID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfVwiIGNoaWxkPVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmV4dGVuZC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImhvdXJcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlLnNwbGl0KFwiOlwiKSA6IFswLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG91ci1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7aGhWYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI1OVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy9idXR0b25zXG4gICAgICBidG5OYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbSBwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnRcIj5gO1xuICAgICAgaWYgKFxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucyAmJlxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICApIHtcbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmJ1dHRvbnMudmFycy5mb3JFYWNoKChidG4pID0+IHtcbiAgICAgICAgICBpZiAoZC53aXRoQnRuTmF2KSB7XG4gICAgICAgICAgICBsZXQgYnRuQ29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoYnRuLmljb24pIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uID8gYnRuLmljb24gOiBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnRuLmljb25Gb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uRm9ybWF0dGVyID8gYnRuLmljb25Gb3JtYXR0ZXIoZCwgYnRuKSA6IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidG4uc2hhcGUpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGNhcC1idG4tXCIgKyBidG4uc2hhcGU7XG4gICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgIGJ0bi5mb3JtYXR0ZXIgPyBidG4uZm9ybWF0dGVyKGQsIGJ0bikgOiBcIlwiXG4gICAgICAgICAgICAgIH0gPC9zcGFuPiBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgbGV0IG5ld0NsYXNzTmFtZSA9IGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIoZCwgYnRuKTtcbiAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIG5ld0NsYXNzTmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke2J0bi5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtidG5Db250ZW50fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIC8vYnV0dG9uc1xuICAgICAgICAgIGJ0bk5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJjYXAtYnRuLWNoaWxkLW5hdi1pdGVtIHBhcmVudCAke1xuICAgICAgICAgICAgZC5pc0Nsb3NlZCA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH1cIiBjaGlsZD1cIiR7ZC5pZCB8fCAtMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbS1jb250ZW50XCI+YDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5idXR0b25zICYmXG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzLmZvckVhY2goKGJ0bikgPT4ge1xuICAgICAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb24gPyBidG4uaWNvbiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyBidG4uaWNvbkZvcm1hdHRlcihjLCBidG4pXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnRuLnNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgY2FwLWJ0bi1cIiArIGJ0bi5zaGFwZTtcbiAgICAgICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgICAgICBidG4uZm9ybWF0dGVyID8gYnRuLmZvcm1hdHRlcihjLCBidG4pIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfSA8L3NwYW4+IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChidG4uYnRuQ2xhc3NOYW1lRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbmV3Q2xhc3NOYW1lID0gYnRuLmJ0bkNsYXNzTmFtZUZvcm1hdHRlcihjLCBidG4pO1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBuZXdDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnRuTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7YnRuLmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBpdGVtRGV0YWlsID0gYCA8ZGl2IGNsYXNzPVwiZGV0YWlsLW5hdi1pdGVtIGhpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldERldGFpbE5hdkl0ZW1Db250ZW50KCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IHN0ciA9IGA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aXRlbURldGFpbH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke25hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aW5pdGlhbE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5kLW5hdi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHtleE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7YnRuTmF2TGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IG5hdkNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICRlbGVtLmFwcGVuZChuYXZDb250YWluZXIpO1xuXG4gICAgLy9kZXRhbGxlIGRlIG5hdi1pdGVtXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLXRpdGxlLmhvdmVyYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcIm92ZXJOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHBvczogcG9zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvL29jdWx0YSBkZXRhbGxlIGRlIG5hdi1pdGVtLCBhbCBzYWxpciBkZWwgbmF2LWl0ZW0tbGlzdFxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubmF2LWl0ZW0tbGlzdFwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIChlKSA9PiB7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJsZWF2ZU5hdkl0ZW1cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vb2N1bHRhIGRldGFsbGUgZGUgbmF2LWl0ZW0tbGlzdCwgYWwgc2FsaXIgZGUgbmF2LWl0ZW1cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGU6bm90KC5ob3ZlcmFibGUpXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZSkgPT4ge1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwibGVhdmVOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGUuY2xpY2tlYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAvLyBzaSB0aWVuZSBjbGlja0xhYmVsVG9EZXRhaWwsIGVzZSBoYW5kbGVyIHNlIGVuY2FyZ2EgKG5vIGRpc3BhcmFyIGNsaWNrTmF2TGVmdEl0ZW0pXG4gICAgICAgIGlmIChpLmNsYXNzTGlzdC5jb250YWlucyhcImNsaWNrLWxhYmVsLXRvLWRldGFpbFwiKSkgcmV0dXJuO1xuICAgICAgICBsZXQgaXRlbUlkID0gaS5nZXRBdHRyaWJ1dGUoXCJpdGVtLWlkXCIpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgbGV0IHZhbHVlID0gaS52YWx1ZTtcbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrTmF2TGVmdEl0ZW1cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlTm9kZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm11bHRpYnV0dG9ucy1idG5cIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tNdWx0aUJ1dHRvbnNCdG5cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlTm9kZSxcbiAgICAgICAgICAgICAgcG9zLFxuICAgICAgICAgICAgICBidXR0b246IGksXG4gICAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpbnB1dFR5cGUgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LXR5cGVcIik7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdmFsdWUgPSBpLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXRUeXBlID09IFwidGltZVwiKSB7XG4gICAgICAgICAgbGV0IGhoX2lucHV0ID0gaS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dC5oaFwiKS52YWx1ZTtcbiAgICAgICAgICBsZXQgbW1faW5wdXQgPSBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlO1xuICAgICAgICAgIG1tX2lucHV0ID0gbW1faW5wdXQgPCAxMCA/IFwiMFwiICsgcGFyc2VGbG9hdChtbV9pbnB1dCkgOiBtbV9pbnB1dDtcbiAgICAgICAgICBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlID0gbW1faW5wdXQ7XG4gICAgICAgICAgdmFsdWUgPSBoaF9pbnB1dCArIFwiOlwiICsgbW1faW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVOYXZMZWZ0SW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgdGFiU2VsZWN0ZWQ6IHRhYixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvbi5jYXAtYnRuLXNoYXBlXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja05hdkxlZnRCdXR0b25cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b24uZGV0YWlsLWJ0blwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOyAvLyBldml0YXIgcXVlIHRhbWJpw6luIGRpc3BhcmUgZWwgY2xpY2sgZGUgaXRlbS10aXRsZVxuICAgICAgICBsZXQgaXRlbUlkID0gaS5nZXRBdHRyaWJ1dGUoXCJpdGVtLWlkXCIpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgbGV0IGl0ZW0gPSB1dGlscy5nZXRJdGVtQnlJZChjb25maWcsIGl0ZW1JZCwgXCJwYXJlbnRcIik7XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5vbkNsaWNrRGV0YWlsQnV0dG9uKSB7XG4gICAgICAgICAgaXRlbS5vbkNsaWNrRGV0YWlsQnV0dG9uKHtcbiAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgICBidXR0b246IGksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gY2xpY2sgZW4gbm9tYnJlL2xhYmVsIGVqZWN1dGEgb25DbGlja0RldGFpbEJ1dHRvbiBjdWFuZG8gY2xpY2tMYWJlbFRvRGV0YWlsXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLXRpdGxlLmNsaWNrLWxhYmVsLXRvLWRldGFpbFwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdChcIi5kZXRhaWwtYnRuXCIpKSByZXR1cm47IC8vIGVsIGJvdMOzbiB5YSBsbyBtYW5lamFcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQsIFwicGFyZW50XCIpO1xuXG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0ub25DbGlja0RldGFpbEJ1dHRvbikge1xuICAgICAgICAgIGl0ZW0ub25DbGlja0RldGFpbEJ1dHRvbih7XG4gICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgIHR5cGU6IHR5cGVOb2RlLFxuICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgYnV0dG9uOiBudWxsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b24udHJlZS1pY29uXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBsZXQgZGF0YUNvbmZpZyA9IGNvbmZpZy5kYXRhLmZpbmQoKGQpID0+IGQuaWQgPT0gaXRlbUlkKTtcblxuICAgICAgICBsZXQgJG5hdkl0ZW0gPSBlLmN1cnJlbnRUYXJnZXQuY2xvc2VzdChcIi5uYXYtaXRlbVwiKTtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRuYXZJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIuY2hpbGRyZW4taXRlbXNcIik7XG4gICAgICAgIGxldCBpdGVtc1RvSGlkZSA9IGUuY3VycmVudFRhcmdldFxuICAgICAgICAgIC5jbG9zZXN0KFwibmF2LmxlZnRcIilcbiAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgIFwiW2NoaWxkPSdcIiArIGl0ZW1JZCArIFwiJ10sIFtjaGlsZC1saXN0PSdcIiArIGl0ZW1JZCArIFwiJ11cIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKCRjaGlsZHJlbikge1xuICAgICAgICAgIGlmICgkY2hpbGRyZW4uY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSkge1xuICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJjYXAtcm90YXRlXCIpO1xuICAgICAgICAgICAgaXRlbXNUb0hpZGUuZm9yRWFjaCgoaSkgPT4gaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKSk7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLmlzQ2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwiY2FwLXJvdGF0ZVwiKTtcbiAgICAgICAgICAgIGl0ZW1zVG9IaWRlLmZvckVhY2goKGkpID0+IGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIikpO1xuICAgICAgICAgICAgZGF0YUNvbmZpZy5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrTmF2TGVmdFRyZWVJY29uXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy9lLmN1cnJlbnRUYXJnZXQucGFyZW50XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIdG1sIGNvbW8gU3RyaW5nLCBwYXJhIGVsIGRldGFsbGUgZGUgaXRlbXMgZW4gZWwgU2lkZWJhciBJenF1aWVyZG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtpdGVtPXt9XSAtIENvbmZpZ3VyYWNpb24gZGUgaXRlbVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IEh0bWwgZGUgdmVudGFuYSBkZSBkZXRhbGxlXG4gICAqL1xuICBnZXREZXRhaWxOYXZJdGVtQ29udGVudChpdGVtID0ge30pIHtcbiAgICBpZiAoaXRlbS5uYXZPdmVyID09IHVuZGVmaW5lZCkgaXRlbS5uYXZPdmVyID0ge307XG5cbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLnN1YnRpdGxlIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jaGlwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxpZ2h0ID8gaXRlbS5saWdodCArIFwiLWxpZ2h0XCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfSAgJHtpdGVtLm5hdk92ZXIuY2hpcCA/IFwiXCIgOiBcImhpZGVcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLmNoaXAgfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2l0ZW0ubmF2T3Zlci5jb250ZW50IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFVzYWRvIHByaW5jaXBhbG1lbnRlIHBhcmEgZm9ybXVsYXJpbyBkZSBpbmdyZXNvIGRlIGRhdG9zIHBhcmEgbG9zIGRpYXNcbiAgICogc2VsZWNjaW9uYWRvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHJldHVybiB7T2JqZWN0fSB7ZWxlbWVudCwgaW5wdXRzfSwgZWxlbWVudCBlcyBlbCBlbGVtZW50byBEb20gZGVsIHNpZGViYXIsXG4gICAqICAgICAgICAgICAgICAgICAgaW5wdXRzIGVzIHVuIGFycmF5IGRlIGVsZW1lbnRvcyBEb20gZGUgY2FkYSBpbnB1dCBjcmVhZG9cbiAgICogICAgICAgICAgICAgICAgICAobm8gc29uIGVsZW1lbnRvcyBodG1sIGRlIHRpcG8gaW5wdXQpXG4gICAqL1xuICBjcmVhdGVOYXZSaWdodChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICB2YXIgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJyaWdodFwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd05hdlJpZ2h0KGNvbmZpZywgJGVsZW0sIHRhYiwgbnVsbCwgW10sIG51bGwpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgZGVyZWNob1xuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSBkYXRvcyBkZWwgZGlhIHNlbGVjY2lvbmFuZG8sIHBhcmEgYXV0b3JyZWxsZW5vIGRlIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRheVNlbGVjdGVkIC0gZGF0b3MgZGVsIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRheVNlbGVjdGVkLmRhdGUgLSBmZWNoYSBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF5U2VsZWN0ZWQuaXRlbSAtIEl0ZW0gZGUgU2lkZWJhciByZWxhY2lvbmFkbyBhbCBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXlTZWxlY3RlZC5wb3MgLSBwb3NpY2lvbiBkZSBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIFNpZGViYXIgRGVyZWNob1xuICAgKi9cbiAgcmVkcmF3TmF2UmlnaHQoXG4gICAgY29uZmlnLFxuICAgICRlbGVtLFxuICAgIHNlbGVjdGVkID0gbnVsbCxcbiAgICB0YWIgPSBudWxsLFxuICAgIGRhdGFEYXkgPSBudWxsLFxuICAgIGRheVNlbGVjdGVkID0gbnVsbFxuICApIHtcbiAgICBsZXQgJG5hdlJpZ2h0ID0gJGVsZW07IC8vZG9tLmNyZWF0ZUVsZW1lbnQoXCJuYXZcIix7Y2xhc3NOYW1lOlwicmlnaHRcIn0pO1xuICAgIGxldCAkZGl2Q29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5hdi1pbnB1dC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgIGxldCBjaGVja2JveElucHV0cyA9IFtdO1xuICAgIGxldCBpbnB1dHNXaXRoUmVsb2FkID0gW107XG4gICAgbGV0IHRhYlNlbGVjdGVkID0gdGFiO1xuICAgIHNlbGVjdGVkID0gc2VsZWN0ZWQgfHwgW2RheVNlbGVjdGVkXTtcblxuICAgIGlmICh0YWJTZWxlY3RlZCAmJiB0YWJTZWxlY3RlZC5pbnB1dHMpIHtcbiAgICAgIHRhYlNlbGVjdGVkLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmRpc2FibGVkKSByZXR1cm47XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpLnNob3dJbnB1dElmICYmXG4gICAgICAgICAgIWkuc2hvd0lucHV0SWYoZGF0YURheSwgZGF5U2VsZWN0ZWQsIHNlbGVjdGVkLCB0YWJTZWxlY3RlZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoXG4gICAgICAgICAgaSxcbiAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgIHRhYlNlbGVjdGVkXG4gICAgICAgICk7XG4gICAgICAgIGlmICgkaW5wdXQpIHtcbiAgICAgICAgICAkZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKCRpbnB1dCk7XG4gICAgICAgICAgJGlucHV0cy5wdXNoKCRpbnB1dCk7XG5cbiAgICAgICAgICBpZiAoaS50eXBlID09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dHMucHVzaCgkaW5wdXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLnJlbG9hZE9uU2VsZWN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0c1dpdGhSZWxvYWQucHVzaCh7ICRpbnB1dCwgY29uZmlnOiBpIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy9tYW5lam8gZGUgZXZlbnRvcyBwYXJhIGlucHV0cyBjb24gc2hvd0lmXG4gICAgaWYgKGNoZWNrYm94SW5wdXRzKSB7XG4gICAgICBjaGVja2JveElucHV0cy5mb3JFYWNoKCgkYykgPT4ge1xuICAgICAgICAvL29idGllbmUga2V5IGRlIGNoZWNrYm94XG4gICAgICAgIGxldCBrZXkgPSAkYy5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG4gICAgICAgIGxldCBwcm9wcyA9IHRhYlNlbGVjdGVkLmlucHV0cy5maW5kKChpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGkua2V5ID09IGtleTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGF0YURheSkge1xuICAgICAgICAgIGlzQ2hlY2tlZCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vb2J0aWVuZSBpbnB1dHMgcmVsYWNpb25hZG9zIGRlc2RlIGNvbmZpZyBwYXJhIG1vc3RyYXIvb2N1bHRhclxuICAgICAgICBsZXQgaW5wdXRzVG9IaWRlID0gdGFiU2VsZWN0ZWQuaW5wdXRzLmZpbHRlcigoaSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpLnNob3dJZiAmJiBpLnNob3dJZiA9PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaW5wdXRzVG9IaWRlS2V5cyA9IGlucHV0c1RvSGlkZS5tYXAoKGkpID0+IGkua2V5KTtcblxuICAgICAgICAvL29idGllbmUgaW5wdXRzIGRlbCBkb20sIGZpbHRyYW5kbyBjb24gaW5wdXRzVG9IaWRlXG4gICAgICAgIGxldCAkaW5wdXRzSGlkZGVuID0gJGlucHV0cy5maWx0ZXIoKCRpKSA9PiB7XG4gICAgICAgICAgbGV0IGlucHV0S2V5ID0gJGkuZ2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIpO1xuICAgICAgICAgIHJldHVybiBpbnB1dHNUb0hpZGVLZXlzLmluZGV4T2YoaW5wdXRLZXkpID4gLTE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vc2kgaGF5IGlucHV0cyxcbiAgICAgICAgaWYgKCRpbnB1dHNIaWRkZW4pIHtcbiAgICAgICAgICBpZiAoIWlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgJGlucHV0c0hpZGRlbi5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgICAgICAkaS5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkYy5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICRpbnB1dHNIaWRkZW4uZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGZuID0gJGMucXVlcnlTZWxlY3RvcihcImlucHV0W3R5cGU9J2NoZWNrYm94J11cIikuY2hlY2tlZFxuICAgICAgICAgICAgICAgID8gXCJyZW1vdmVcIlxuICAgICAgICAgICAgICAgIDogXCJhZGRcIjtcbiAgICAgICAgICAgICAgJGkuY2xhc3NMaXN0W2ZuXShcImhpZGVcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHNhdmVDYW5jZWxCdG5zID0gdGhpcy5jcmVhdGVOYXZSaWdodGJ1dHRvbnMoY29uZmlnKTtcbiAgICAkZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKHNhdmVDYW5jZWxCdG5zKTtcbiAgICAkbmF2UmlnaHQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAkbmF2UmlnaHQuYXBwZW5kQ2hpbGQoJGRpdkNvbnRhaW5lcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogJG5hdlJpZ2h0LFxuICAgICAgaW5wdXRzOiAkaW5wdXRzLFxuICAgICAgaW5wdXRzV2l0aFJlbG9hZCxcbiAgICAgIHNhdmVDYW5jZWxCdG5zLFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQ29ybmVyIGluZmVyaW9yIGl6cXVpZXJkbywgY29tbyB0aXR1bG8gcGFyYSBmb290ZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlQ29ybmVyRm9vdGVyKGNvbmZpZykge1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5mb290ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3Rlci5lbmFibGVkID09IGZhbHNlXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmZvb3Rlcikge1xuICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiY29ybmVyLWZvb3RlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5mb290ZXIubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgRm9vdGVyIHBhcmEgbW9iaWxlIChkZWJham8gZGUgbGEgdGFibGEsIHJlZGltZW5zaW9uYSBsYSBwbGFuaWxsYSlcbiAgICogU29sbyB2aXNpYmxlIGVuIG1vYmlsZSBjdWFuZG8gaGF5IHNlbGVjY2nDs24uXG4gICAqIENvbmZpZzogdGltZWxpbmUubW9iaWxlRm9vdGVyLmNhbmNlbExhYmVsLCB0aW1lbGluZS5tb2JpbGVGb290ZXIuY2FuY2VsU2hvd1doZW4sXG4gICAqICAgdGltZWxpbmUubW9iaWxlRm9vdGVyLmJ1dHRvbnNcbiAgICogICBjYW5jZWxTaG93V2hlbjogXCJzZWxlY3RcInxcImRldGFpbFwifFwiYWx3YXlzXCIgLSBjdcOhbmRvIG1vc3RyYXIgY2FuY2VsIChkZWZhdWx0OiBcInNlbGVjdFwiKVxuICAgKiAgIGJ1dHRvbnM6IFt7IGlkLCBsYWJlbCwgaWNvbj8sIGN1c3RvbUNsYXNzPywgc2hvd1doZW4/LCBkaXNhYmxlZFdoZW5Ob1NlbGVjdGlvbj8sIG9uQ2xpY2sgfV1cbiAgICogICBzaG93V2hlbjogXCJzZWxlY3RcInxcImRldGFpbFwifFwiYWx3YXlzXCIgLSBzZWxlY3Q9Y2hlY2tib3ggYWN0aXZvLCBkZXRhaWw9Y2hlY2tib3ggaW5hY3Rpdm8gKGRlZmF1bHQ6IFwiYWx3YXlzXCIpXG4gICAqICAgZGlzYWJsZWRXaGVuTm9TZWxlY3Rpb246IHRydWUgLSBkZXNhY3RpdmEgZWwgYm90w7NuIGVuIG1vZG8gc2VsZWN0IHNpbiBkw61hcyBzZWxlY2Npb25hZG9zXG4gICAqICAgb25DbGljayh7IGV2dCwgc2VsZWN0ZWQgfSkgLSBzZWxlY3RlZDogYXJyYXkgZGUgeyBpbmRleCwgZGF0ZSwgaXRlbSwgcG9zIH0gY29uIGTDrWFzIHNlbGVjY2lvbmFkb3NcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gbW9iaWxlLWZvb3RlclxuICAgKi9cbiAgY3JlYXRlTW9iaWxlRm9vdGVyKGNvbmZpZykge1xuICAgIGNvbnN0IG1vYmlsZUZvb3RlckNvbmZpZyA9IGNvbmZpZy50aW1lbGluZS5tb2JpbGVGb290ZXIgfHwge307XG4gICAgY29uc3QgY2FuY2VsTGFiZWwgPSBtb2JpbGVGb290ZXJDb25maWcuY2FuY2VsTGFiZWwgfHwgXCJDYW5jZWxhclwiO1xuICAgIGNvbnN0IGNhbmNlbFNob3dXaGVuID0gbW9iaWxlRm9vdGVyQ29uZmlnLmNhbmNlbFNob3dXaGVuIHx8IFwic2VsZWN0XCI7XG4gICAgY29uc3QgYnV0dG9ucyA9IEFycmF5LmlzQXJyYXkobW9iaWxlRm9vdGVyQ29uZmlnLmJ1dHRvbnMpID8gbW9iaWxlRm9vdGVyQ29uZmlnLmJ1dHRvbnMgOiBbXTtcbiAgICBjb25zdCBtb2JpbGVTZWxlY3RBY3RpdmUgPSBjb25maWcudGltZWxpbmUubW9iaWxlU2VsZWN0YWJsZSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBtb2JpbGVTZWxlY3RMYWJlbCA9IG1vYmlsZVNlbGVjdEFjdGl2ZSA/IFwiRGVzYWN0aXZhciBzZWxlY2Npw7NuXCIgOiBcIkFjdGl2YXIgc2VsZWNjacOzbiBkZSBkw61hc1wiO1xuICAgIGNvbnN0IG1vYmlsZVNlbGVjdEljb24gPSBpY29ucy5nZXRDaGVja2JveEljb24gPyBpY29ucy5nZXRDaGVja2JveEljb24obW9iaWxlU2VsZWN0QWN0aXZlKSA6IChtb2JpbGVTZWxlY3RBY3RpdmUgPyBpY29ucy5jaGVja2JveENoZWNrZWQgOiBpY29ucy5jaGVja2JveFVuY2hlY2tlZCk7XG4gICAgY29uc3QgZm9yY2VNb2JpbGUgPSBjb25maWcudGltZWxpbmUgJiYgY29uZmlnLnRpbWVsaW5lLmZvcmNlTW9iaWxlID09PSB0cnVlO1xuICAgIGNvbnN0IGZvb3RlckNsYXNzZXMgPSBmb3JjZU1vYmlsZSA/IFwibW9iaWxlLWZvb3RlciBjLWQtbW9iaWxlLWZsZXhcIiA6IFwibW9iaWxlLWZvb3RlciBjLWQtbW9iaWxlLWZsZXggYy1kLWRlc2t0b3Atbm9uZVwiO1xuICAgIGxldCBzdHIgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiJHtmb290ZXJDbGFzc2VzfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWZvb3Rlci1jb250ZW50XCI+YDtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGVEZXNrdG9wICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgY291bnRIaWRkZW4gPSAhbW9iaWxlU2VsZWN0QWN0aXZlO1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImNhcC1idG4tbW9iaWxlLXNlbGVjdFwiIHRvZ2dsZS1tb2JpbGUtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkIG1vYmlsZS1mb290ZXItc2VsZWN0LXRvZ2dsZSAke21vYmlsZVNlbGVjdEFjdGl2ZSA/IFwiYWN0aXZlXCIgOiBcIlwifVwiXG4gICAgICAgICAgICAgICAgICByb2xlPVwic3dpdGNoXCIgYXJpYS1jaGVja2VkPVwiJHttb2JpbGVTZWxlY3RBY3RpdmV9XCIgYXJpYS1sYWJlbD1cIiR7bW9iaWxlU2VsZWN0TGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgIGNhcC10b29sdGlwPVwiJHttb2JpbGVTZWxlY3RMYWJlbH1cIj4ke21vYmlsZVNlbGVjdEljb259PHNwYW4gY2xhc3M9XCJtb2JpbGUtZm9vdGVyLXNlbGVjdC1sYWJlbFwiPlNlbGVjY2lvbmFyIGTDrWFzPC9zcGFuPjxzcGFuIGNsYXNzPVwibW9iaWxlLWZvb3Rlci1zZWxlY3QtY291bnRcIiAke2NvdW50SGlkZGVuID8gJ3N0eWxlPVwiZGlzcGxheTpub25lXCInIDogJyd9PjAgZDwvc3Bhbj48L2J1dHRvbj5gO1xuICAgIH1cbiAgICBzdHIgKz0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtZm9vdGVyLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2FwLWJ0bi1vdXRsaW5lIG1vYmlsZS1mb290ZXItY2FuY2VsIG1vYmlsZS1mb290ZXItc2VsZWN0LXRvZ2dsZVwiIGRhdGEtc2hvdy13aGVuPVwiJHtjYW5jZWxTaG93V2hlbn1cIj4ke2NhbmNlbExhYmVsfTwvYnV0dG9uPmA7XG4gICAgYnV0dG9ucy5mb3JFYWNoKChidG4sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21DbGFzcyA9IGJ0bi5jdXN0b21DbGFzcyB8fCBcIlwiO1xuICAgICAgY29uc3QgYnRuQ2xhc3MgPSBidG4uaWNvbiA/IFwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIiA6IFwiY2FwLWJ0bi1vdXRsaW5lXCI7XG4gICAgICBjb25zdCBzaG93V2hlbiA9IGJ0bi5zaG93V2hlbiB8fCBcImFsd2F5c1wiO1xuICAgICAgY29uc3QgZGlzYWJsZWRXaGVuTm9TZWxlY3Rpb24gPSBidG4uZGlzYWJsZWRXaGVuTm9TZWxlY3Rpb24gPT09IHRydWU7XG4gICAgICBjb25zdCBjb250ZW50ID0gYnRuLmljb25cbiAgICAgICAgPyBgPHNwYW4+PHN2ZyBzdHlsZT1cIndpZHRoOjI0cHg7aGVpZ2h0OjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCIke2J0bi5pY29ufVwiLz48L3N2Zz48L3NwYW4+YFxuICAgICAgICA6IChidG4ubGFiZWwgfHwgXCJcIik7XG4gICAgICBzdHIgKz0gYDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiJHtidG5DbGFzc30gbW9iaWxlLWZvb3Rlci1idG4gbW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xlICR7Y3VzdG9tQ2xhc3N9XCIgZGF0YS1tb2JpbGUtYnRuLWlkeD1cIiR7aW5kZXh9XCIgZGF0YS1tb2JpbGUtYnRuPVwiJHtidG4uaWQgfHwgXCJcIn1cIiBkYXRhLXNob3ctd2hlbj1cIiR7c2hvd1doZW59XCIgZGF0YS1kaXNhYmxlZC13aGVuLW5vLXNlbGVjdGlvbj1cIiR7ZGlzYWJsZWRXaGVuTm9TZWxlY3Rpb259XCI+JHtjb250ZW50fTwvYnV0dG9uPmA7XG4gICAgfSk7XG4gICAgc3RyICs9IGBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gICAgY29uc3QgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gICAgY29uc3QgJHRvZ2dsZU1vYmlsZVNlbGVjdCA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJbdG9nZ2xlLW1vYmlsZS1zZWxlY3RdXCIpO1xuICAgIGlmICgkdG9nZ2xlTW9iaWxlU2VsZWN0KSB7XG4gICAgICAkdG9nZ2xlTW9iaWxlU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInRvZ2dsZU1vYmlsZVNlbGVjdFwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgRm9vdGVyIHBhcmEgcGxhbmlsbGFcbiAgICogSW5pY2lhbG1lbnRlIGNyZWFkbyBwYXJhIHRvdGFsZXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlRm9vdGVyKGNvbmZpZykge1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5mb290ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3Rlci5lbmFibGVkID09IGZhbHNlXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgICA8Zm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgYDtcbiAgICBjb25maWcudGltZWxpbmUuZm9vdGVyLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+JHtkLnZhbHVlfTwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgICB9KTtcbiAgICBzdHIgKz0gYFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgYDtcblxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgRm9vdGVyIHBhcmEgcGxhbmlsbGFcbiAgICogSW5pY2lhbG1lbnRlIGNyZWFkbyBwYXJhIHRvdGFsZXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gc2VsZWN0ZWQgLSBhcnJheSBkZSBvYmpldG9zLCBkZSBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlU2VsZWN0Qm9hcmQoY29uZmlnLCBzZWxlY3RlZCkge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1jb250YWluZXJcIiB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdTZWxlY3RCb2FyZCgkZWxlbSwgc2VsZWN0ZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIGxpbmVhIHZlcnRpY2FsIHBhcmEgZmVjaGEgQWN0dWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lciBGb290ZXJcbiAgICovXG4gIGNyZWF0ZVRvZGF5TGluZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdUb2RheUxpbmUoXG4gICAgICBjb25maWcsXG4gICAgICBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0b2RheS1saW5lXCIgfSlcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgbGluZWEgdmVydGljYWwgcGFyYSBmZWNoYSBBY3R1YWxcbiAgICogc2kgZWwgZWxlbWVudG8gJGVsZW0gbm8gZXMgZW52aWFkbywgc2UgY3JlYSB1biBudWV2byBlbGVtZW50b1xuICAgKlxuICAgKiBTaSBlbCBkaWEgYWN0dWFsIG5vIGVzdGEgZGVudHJvIGRlbCByYW5nbyBkZSBmZWNoYXMgZGVsIGNvbmZpZyxcbiAgICogZGVzaGFiaWxpdGEgbGEgbGluZWEgY29uIGxhIGNsYXNlIGNzcyAuZGlzYWJsZS1saW5lXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbJGVsZW09bnVsbF0gLSBFbGVtZW50byBEb20gZG9uZGUgcmVjcmVhIGxhIGxpbmVhLCBzaSBlcyBudWxsLCBsYSBjcmVhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lciBGb290ZXJcbiAgICovXG4gIHJlZHJhd1RvZGF5TGluZShjb25maWcsICRlbGVtID0gbnVsbCkge1xuICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLmVuZCkuZ2V0VGltZSgpO1xuICAgIGxldCB0b2RheVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgeyBoZWlnaHQsIGRheVdpZHRoIH0gPSB1dGlscy5nZXRUYWJsZURpbWVuc2lvbnMoY29uZmlnKTtcblxuICAgIGlmICgkZWxlbSA9PSBudWxsKVxuICAgICAgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0b2RheS1saW5lXCIgfSk7XG5cbiAgICBpZiAoZW5kVGltZSA8IHRvZGF5VGltZSkge1xuICAgICAgJGVsZW0uY2xhc3NMaXN0LmFkZChcImRpc2FibGUtbGluZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGVsZW0uY2xhc3NMaXN0LnJlbW92ZShcImRpc2FibGUtbGluZVwiKTtcbiAgICB9XG5cbiAgICBsZXQgZGlmZkRheXMgPSBNYXRoLmZsb29yKFxuICAgICAgZGF0ZVV0aWxzLmRpZmZEYXlzKFxuICAgICAgICBjb25maWcudGltZWxpbmUuc3RhcnQsXG4gICAgICAgIGRhdGVVdGlscy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgZGlmZiA9IGRpZmZEYXlzICogZGF5V2lkdGg7XG4gICAgZGlmZiArPSBkYXlXaWR0aCAvIDIgLSAyOyAvLyBwYXJhIGNlbnRyYXIgbGluZWFcbiAgICBPYmplY3QuYXNzaWduKCRlbGVtLnN0eWxlLCB7XG4gICAgICBcIm1hcmdpbi1sZWZ0XCI6IGRpZmYgKyBcInB4XCIsXG4gICAgICBoZWlnaHQ6IGhlaWdodCArIFwicHhcIixcbiAgICB9KTtcbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgZWxlbWVudG8gRmxvYXRCb3gsIHF1ZSBjb250aWVuZSBsb3MgZGF0b3MgcXVlIHNlIG11ZXN0cmEgZW4gbGEgdGFibGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhYiAtIFRhYiBkZSByZWZlcmVuY2lhLCBwYXJhIG1vc3RyYXIgZGF0b3MgY29uZmlndXJhZG9zIHBvciB0YWJcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlRmxvYXRCb3goY29uZmlnLCB0YWIpIHtcbiAgICBsZXQgJGNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJmbG9hdC1ib3gtY29udGFpbmVyXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3RmxvYXRCb3goY29uZmlnLCB0YWIsICRjb250YWluZXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgZWxlbWVudG8gRmxvYXRCb3gsIHF1ZSBjb250aWVuZSBsb3MgZGF0b3MgcXVlIHNlIG11ZXN0cmEgZW4gbGEgdGFibGFcbiAgICogU2UgdXNhIHByaW5jaXBhbG1lbnRlIHBhcmEgbW9zdHJhciBkYXRvcyBlbiBsYSB0YWJsYSBkZSBsYSBwbGFuaWxsYVxuICAgKiBsb3MgbXVlc3RyYSBkZSBtYW5lcmEgZmxvdGFudGUsIGNhbGN1bGFuZG8gZWwgVG9wIHkgZWwgTGVmdCBzZWd1biBsYSBwb3NjaW9uXG4gICAqXG4gICAqIFNlIGNvbnNpZGVyYW4gbG9zIGVsZW1lbnRvcyBwYWRyZXMgb2N1bHRvcywgcGFyYSBvY3VsdGFyIGxvcyBkYXRvc1xuICAgKlxuICAgKiBTZSBpbnNlcnRhbiBsb3MgZWxlbWVudG9zIEZsb2F0Qm94LCBjb21vIGVsZW1lbnRvIGNvbiBkYXRvcyBkZSB1biBpdGVtIHkgZGlhIGVzcGVjaWZpY29cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhYiAtIFRhYiBkZSByZWZlcmVuY2lhLCBwYXJhIG1vc3RyYXIgZGF0b3MgY29uZmlndXJhZG9zIHBvciB0YWJcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgcmVkcmF3RmxvYXRCb3goY29uZmlnLCB0YWIsICRjb250YWluZXIpIHtcbiAgICAkY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgLy9sZXQgdGFiU2VsZWN0ZWQgPSB0YWIgfHwgbnVsbDtcblxuICAgIGNvbmZpZy5kYXRhLmZvckVhY2goKGRhdGFQYXJlbnQpID0+IHtcbiAgICAgIGlmIChkYXRhUGFyZW50LmlzSGlkZGVuKSByZXR1cm47XG5cbiAgICAgIChkYXRhUGFyZW50LmRhdGEgfHwgW10pLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVGbG9hdEJveEl0ZW0oe1xuICAgICAgICAgIGNvbnRhaW5lcjogJGNvbnRhaW5lcixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGl0ZW06IGRhdGFQYXJlbnQsXG4gICAgICAgICAgaXNDbG9zZWQ6IGRhdGFQYXJlbnQuaXNDbG9zZWQsXG4gICAgICAgICAgdGFiLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICB0eXBlTm9kZTogXCJwYXJlbnRcIixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGF0YVBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChkYXRhQ2hpbGQpID0+IHtcbiAgICAgICAgaWYgKGRhdGFDaGlsZC5pc0hpZGRlbikgcmV0dXJuO1xuXG4gICAgICAgIGRhdGFDaGlsZC5kYXRhLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUZsb2F0Qm94SXRlbSh7XG4gICAgICAgICAgICBjb250YWluZXI6ICRjb250YWluZXIsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaXRlbTogZGF0YUNoaWxkLFxuICAgICAgICAgICAgaXNDbG9zZWQ6IGRhdGFQYXJlbnQuaXNDbG9zZWQsXG4gICAgICAgICAgICB0YWIsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB0eXBlTm9kZTogXCJjaGlsZFwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRjb250YWluZXI7XG4gIH0sXG5cbiAgY3JlYXRlRmxvYXRCb3hJdGVtKHtcbiAgICBjb250YWluZXIsXG4gICAgZGF0YSxcbiAgICBpdGVtLFxuICAgIGlzQ2xvc2VkLFxuICAgIHRhYixcbiAgICBjb25maWcsXG4gICAgdHlwZU5vZGUgPSBcImNoaWxkXCIsXG4gIH0pIHtcbiAgICAvLyBWZXJpZmljYXIgc2kgaGF5IG1lbnNhamVcbiAgICBsZXQgbXNnID0gbnVsbDtcbiAgICBpZiAodGFiLmZsb2F0Qm94ICYmIHRhYi5mbG9hdEJveC5tZXNzYWdlUGF0aCkge1xuICAgICAgbXNnID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEsIHRhYi5mbG9hdEJveC5tZXNzYWdlUGF0aCk7XG4gICAgfVxuICAgIGNvbnN0IGhhc01lc3NhZ2UgPSBtc2cgfHwgKGRhdGEubWVzc2FnZSAmJiBkYXRhLm1lc3NhZ2UudmFsdWUpO1xuXG4gICAgLy8gVmVyaWZpY2FyIHNpIGhheSBlcnJvcmVzXG4gICAgY29uc3QgaGFzRXJyb3JzID0gZGF0YS5lcnJvcnMgJiYgZGF0YS5lcnJvcnMubGVuZ3RoID4gMDtcblxuICAgIC8vIFZlcmlmaWNhciBzaSBoYXkgY29udGVuaWRvIHZpc2libGUgZW4gZmxvYXRCb3hcbiAgICBsZXQgaGFzVmlzaWJsZUNvbnRlbnQgPSBmYWxzZTtcblxuICAgIGlmIChoYXNNZXNzYWdlIHx8IGhhc0Vycm9ycykge1xuICAgICAgaGFzVmlzaWJsZUNvbnRlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZGF0YS52YWx1ZXMgJiYgdGFiICYmIHRhYi5mbG9hdEJveCkge1xuICAgICAgLy8gVmVyaWZpY2FyIHNpIGhheSBjb250ZW5pZG8gdmlzaWJsZSBlbiBudW1zLCBkb3RzLCBwbG90cywgaWNvbnNcbiAgICAgIGlmICh0YWIuZmxvYXRCb3gubnVtcykge1xuICAgICAgICBoYXNWaXNpYmxlQ29udGVudCA9IHRhYi5mbG9hdEJveC5udW1zLnNvbWUoKG4pID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgIGlmIChuLnZhck5hbWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhck5hbWUpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc2hvd0lmID0gdHJ1ZTtcbiAgICAgICAgICBsZXQgaGlkZUlmID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAobi52YXJTaG93KSB7XG4gICAgICAgICAgICBzaG93SWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJTaG93KSk7XG4gICAgICAgICAgICAvLyBTaSBubyBoYXkgdmFyTmFtZSBwZXJvIGhheSB2YXJTaG93LCBjb25zaWRlcmFyIGNvbW8gY29udGVuaWRvIHZpc2libGUgc2kgc2UgY3VtcGxlIGxhIGNvbmRpY2nDs25cbiAgICAgICAgICAgIGlmICghbi52YXJOYW1lKSB7XG4gICAgICAgICAgICAgIGlmIChuLnZhckhpZGUpIHtcbiAgICAgICAgICAgICAgICBoaWRlSWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJIaWRlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHNob3dJZiAmJiAhaGlkZUlmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobi52YXJIaWRlKSB7XG4gICAgICAgICAgICBoaWRlSWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJIaWRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuLmhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaGlkZUlmID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgc2hvd0lmICYmICFoaWRlSWY7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50ICYmIHRhYi5mbG9hdEJveC5kb3RzKSB7XG4gICAgICAgIGhhc1Zpc2libGVDb250ZW50ID0gdGFiLmZsb2F0Qm94LmRvdHMuc29tZSgoZG90KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhck5hbWUpICE9PSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCAmJiB0YWIuZmxvYXRCb3gucGxvdHMpIHtcbiAgICAgICAgaGFzVmlzaWJsZUNvbnRlbnQgPSB0YWIuZmxvYXRCb3gucGxvdHMuc29tZSgobikgPT4ge1xuICAgICAgICAgIHJldHVybiB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFyTmFtZSkgIT09IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50ICYmIHRhYi5mbG9hdEJveC5pY29ucykge1xuICAgICAgICBoYXNWaXNpYmxlQ29udGVudCA9IHRhYi5mbG9hdEJveC5pY29ucy5zb21lKChpY29uQ29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKGljb25Db25maWcudmFyTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgaWNvbkNvbmZpZy52YXJOYW1lKSAhPT0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGljb25Db25maWcuaWNvbiAhPT0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQgJiYgdGFiLmZsb2F0Qm94LnJvd0RvdHMpIHtcbiAgICAgICAgaGFzVmlzaWJsZUNvbnRlbnQgPSB0YWIuZmxvYXRCb3gucm93RG90cy5zb21lKChyb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyb3cpICYmXG4gICAgICAgICAgICByb3cuc29tZSgoZG90KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICAgIGxldCBzaG93SWYgPSB0cnVlO1xuICAgICAgICAgICAgICBsZXQgaGlkZUlmID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgaWYgKGRvdC52YXJTaG93KSB7XG4gICAgICAgICAgICAgICAgc2hvd0lmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGRvdC52YXJTaG93KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRvdC52YXJIaWRlKSB7XG4gICAgICAgICAgICAgICAgaGlkZUlmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGRvdC52YXJIaWRlKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gc2hvd0lmICYmICFoaWRlSWY7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpIG5vIGhheSBjb250ZW5pZG8gdmlzaWJsZSwgbm8gY3JlYXIgZWwgZmxvYXRCb3hcbiAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvL2NoaWxkcmVuIERhdGFcbiAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uRmxvYXRCb3goY29uZmlnLCBkYXRhLCBpdGVtLCB0eXBlTm9kZSk7XG5cbiAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcblxuICAgIGlmIChkYXRhLmVycm9ycyAmJiBkYXRhLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCJoYXMtZXJyb3JzIFwiO1xuICAgICAgaWYgKGRhdGEuZXJyb3JzWzBdKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSBkYXRhLmVycm9yc1swXS5jbGFzc05hbWVJY29uICsgXCIgXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzQ2xvc2VkKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCJoaWRlIFwiO1xuICAgIH1cblxuICAgIGlmIChoYXNNZXNzYWdlKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCJoYXMtbWVzc2FnZSBcIjtcbiAgICB9XG5cbiAgICBsZXQgc3RyTXNnID0gXCJcIjtcbiAgICBpZiAoaGFzTWVzc2FnZSkge1xuICAgICAgbGV0IHZpZXdCb3ggPSBcIjAgMCAyNCAyNFwiO1xuICAgICAgLy9lbWFpbCBvdXRsaW5lIGljb25cbiAgICAgIGxldCBpY29uID1cbiAgICAgICAgXCJNMjIgNkMyMiA0LjkgMjEuMSA0IDIwIDRINEMyLjkgNCAyIDQuOSAyIDZWMThDMiAxOS4xIDIuOSAyMCA0IDIwSDIwQzIxLjEgMjAgMjIgMTkuMSAyMiAxOFY2TTIwIDZMMTIgMTFMNCA2SDIwTTIwIDE4SDRWOEwxMiAxM0wyMCA4VjE4WlwiO1xuXG4gICAgICBzdHJNc2cgPSBgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIke3ZpZXdCb3h9XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiJHtpY29ufVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1ib3ggJHtjbGFzc05hbWV9IFwiXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7cG9zaXRpb24gPyBwb3NpdGlvbiA6IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2l0ZW0uaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7aXRlbS50eXBlIHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICR7c3RyTXNnfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb2F0LWJveC1jb250ZW50XCI+YDtcblxuICAgIGxldCBzdHJFeHQgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb2F0LWJveC1leHQgJHtpc0Nsb3NlZCA/IFwiaGlkZVwiIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiJHtwb3NpdGlvbiA/IHBvc2l0aW9uIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2l0ZW0uaWQgfHwgLTF9LWV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtpdGVtLnR5cGUgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb25nLWJhci1jb250YWluZXJcIj5gO1xuXG4gICAgaWYgKHRhYiAmJiB0YWIuZmxvYXRCb3gpIHtcbiAgICAgIGlmICh0YWIuZmxvYXRCb3gucGxvdHMpIHtcbiAgICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwicGxvdC1mbG9hdGJveC1jb250YWluZXJcIj5gO1xuICAgICAgICB0YWIuZmxvYXRCb3gucGxvdHMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGxldCBjc3NWYXJzID0gXCJcIjtcbiAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICBpZiAodXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhck5hbWUpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobi5jb2xvcikge1xuICAgICAgICAgICAgICBjc3NWYXJzID0gYC0tbG9jYWwtY29sb3I6JHtuLmNvbG9yfTtgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJwbG90LWZsb2F0Ym94ICR7Y2xhc3NOYW1lfSAke1xuICAgICAgICAgICAgICBuLnN0eWxlIHx8IFwiXCJcbiAgICAgICAgICAgIH1cIiBzdHlsZT1cIiR7Y3NzVmFyc30gXCI+PC9kaXY+YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhYi5mbG9hdEJveC5pY29ucykge1xuICAgICAgICB0YWIuZmxvYXRCb3guaWNvbnMuZm9yRWFjaCgoaWNvbkNvbmZpZykgPT4ge1xuICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICBsZXQgY29sb3JTdHlsZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IHZpZXdCb3ggPSBcIjAgMCAyNCAyNFwiO1xuICAgICAgICAgIGxldCBpY29uID0gaWNvbkNvbmZpZy5pY29uIHx8IG51bGw7XG5cbiAgICAgICAgICBpZiAoaWNvbkNvbmZpZy52YXJOYW1lKSB7XG4gICAgICAgICAgICBsZXQgaWNvblZhciA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgaWNvbkNvbmZpZy52YXJOYW1lKTtcbiAgICAgICAgICAgIGlmIChpY29uVmFyKSB7XG4gICAgICAgICAgICAgIGljb24gPSBpY29uVmFyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpY29uQ29uZmlnLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gaWNvbkNvbmZpZy5jbGFzc05hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGljb25Db25maWcuY29sb3IpIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGljb25Db25maWcuY29sb3IpKSB7XG4gICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtpY29uQ29uZmlnLmNvbG9yfTtgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IGljb25Db25maWcuY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGljb25Db25maWcuY29sb3JWYXJOYW1lKSB7XG4gICAgICAgICAgICBsZXQgY29sb3JWYXIgPSB1dGlscy5nZXRWYXJCeVBhdGgoXG4gICAgICAgICAgICAgIGRhdGEudmFsdWVzLFxuICAgICAgICAgICAgICBpY29uQ29uZmlnLmNvbG9yVmFyTmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb2xvclZhcikge1xuICAgICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihjb2xvclZhcikpIHtcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7Y29sb3JWYXJ9O2A7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IGNvbG9yVmFyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1mbG9hdGJveCAke2NsYXNzTmFtZX0gJHtcbiAgICAgICAgICAgICAgICAgIGNvbG9yQ2xhc3MgPyBcImhhcy1jb2xvclwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH1cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZX1cIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIiR7dmlld0JveH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIiR7aWNvbn1cIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vbnVtZXJvcyBlbiBlbCBmbG9hdEJveFxuICAgICAgaWYgKHRhYi5mbG9hdEJveC5udW1zKSB7XG4gICAgICAgIHRhYi5mbG9hdEJveC5udW1zLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAodGFiLmxlZ2VuZHMgJiYgbi50YWJLZXkpIHtcbiAgICAgICAgICAgIGxldCBsZWdlbmQgPSB0YWIubGVnZW5kcy5maW5kKChsKSA9PiBsLmtleSA9PSBuLnRhYktleSk7XG4gICAgICAgICAgICBpZiAobGVnZW5kICYmICFsZWdlbmQuYWN0aXZlKSByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGRhdGFGbG9hdEJveCA9IG51bGw7XG4gICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IHNob3dJZiA9IHRydWU7XG4gICAgICAgICAgbGV0IGhpZGVJZiA9IGZhbHNlO1xuICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICBsZXQgY29sb3JTdHlsZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNsYXNzTmFtZXNFeHQgPSBcIlwiO1xuICAgICAgICAgIGxldCBjb2xvclN0eWxlRXh0ID0gXCJcIjtcbiAgICAgICAgICBsZXQgY3NzVmFycyA9IFwiXCI7XG5cbiAgICAgICAgICBpZiAobi52YXJOYW1lKSB7XG4gICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFyTmFtZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG4udmFyU2hvdykge1xuICAgICAgICAgICAgc2hvd0lmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFyU2hvdykpO1xuICAgICAgICAgICAgLy8gU2kgbm8gaGF5IHZhck5hbWUgcGVybyBoYXkgdmFyU2hvdywgZXN0YWJsZWNlciBkYXRhRmxvYXRCb3ggY29tbyBzdHJpbmcgdmFjw61vIHBhcmEgcmVuZGVyaXphciBibG9xdWUgdmFjw61vXG4gICAgICAgICAgICBpZiAoIW4udmFyTmFtZSkge1xuICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSBcIlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ID0gZGF0YUZsb2F0Qm94IHx8IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG4udmFySGlkZSkge1xuICAgICAgICAgICAgaGlkZUlmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFySGlkZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuLmhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaGlkZUlmID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobi5zaGFwZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwic2hhcGUtXCIgKyBuLnNoYXBlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuLmNvbG9yKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihuLmNvbG9yKSkge1xuICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7bi5jb2xvcn07YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBuLmNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuLmxvbmdCYXIpIHtcbiAgICAgICAgICAgIGxldCBsb25nQmFyQ29sb3IgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGxvbmdCYXJPcGFjaXR5ID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKG4ubG9uZ0JhckNvbG9yKSB7XG4gICAgICAgICAgICAgIGxvbmdCYXJDb2xvciA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi5sb25nQmFyQ29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobG9uZ0JhckNvbG9yKSB7XG4gICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGxvbmdCYXJDb2xvcikpIHtcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlRXh0ID0gYC0tbG9jYWwtY29sb3I6ICR7bG9uZ0JhckNvbG9yfTtgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZXNFeHQgKz0gbG9uZ0JhckNvbG9yICsgXCItbGlnaHQgXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JDbGFzcyAmJiBjb2xvckNsYXNzICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lc0V4dCArPSBjb2xvckNsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2xvclN0eWxlICYmIGNvbG9yU3R5bGUgIT0gXCJcIikge1xuICAgICAgICAgICAgICBjb2xvclN0eWxlRXh0ID0gY29sb3JTdHlsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG4ubG9uZ0Jhck9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgbG9uZ0Jhck9wYWNpdHkgPVxuICAgICAgICAgICAgICAgIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi5sb25nQmFyT3BhY2l0eSkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGxvbmdCYXJPcGFjaXR5KSB7XG4gICAgICAgICAgICAgICAgY29sb3JTdHlsZUV4dCArPSBcIi0tbG9jYWwtb3BhY2l0eTogXCIgKyBsb25nQmFyT3BhY2l0eSArIFwiO1wiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuLmxvbmdCYXJDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lc0V4dCArPVxuICAgICAgICAgICAgICAgIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi5sb25nQmFyQ2xhc3NOYW1lKSB8fCBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbG9uZ0JhciA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi5sb25nQmFyKTtcbiAgICAgICAgICAgIGlmIChsb25nQmFyKSB7XG4gICAgICAgICAgICAgIGNzc1ZhcnMgPSBgLS1sb25nOiR7bG9uZ0Jhcn07YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGF0YUZsb2F0Qm94ICE9PSBudWxsICYmIHNob3dJZiAmJiAhaGlkZUlmKSB7XG4gICAgICAgICAgICBzdHIgKz0gYDxzcGFuIGNsYXNzPVwiZGF0YSAke2NvbG9yQ2xhc3N9ICR7Y2xhc3NOYW1lfVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhRmxvYXRCb3ggPT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhRmxvYXRCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGRhdGFGbG9hdEJveCA9PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHV0aWxzLnJvdW5kKGRhdGFGbG9hdEJveCwgbi5yb3VuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YDtcblxuICAgICAgICAgICAgaWYgKG4ubG9uZ0JhciAmJiBjc3NWYXJzKSB7XG4gICAgICAgICAgICAgIHN0ckV4dCArPSBgPGRpdiBjbGFzcz1cImxvbmctYmFyICR7Y2xhc3NOYW1lc0V4dH1cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZUV4dH0gJHtjc3NWYXJzfSBcIj48L2Rpdj4gYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvL3B1bnRvcyBlbiBlbCBmbG9hdEJveFxuICAgICAgaWYgKHRhYi5mbG9hdEJveC5kb3RzKSB7XG4gICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cImRvdC1jb250YWluZXItbWlkZGxlXCI+YDtcbiAgICAgICAgdGFiLmZsb2F0Qm94LmRvdHMuZm9yRWFjaCgoZG90KSA9PiB7XG4gICAgICAgICAgaWYgKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhck5hbWUpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBjb2xvclN0eWxlID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKGRvdC5zaGFwZSkge1xuICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gZG90LnNoYXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZG90LmNvbG9yKSB7XG4gICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGRvdC5jb2xvcikpIHtcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7ZG90LmNvbG9yfWA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IGRvdC5jb2xvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90ICR7Y29sb3JDbGFzc30gJHtjbGFzc05hbWV9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGV9XCIgPjwvZGl2PmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG5cbiAgICAgIC8vZmlsYSBkZSBwdW50b3MgZW4gZmxvYXRCb3hcbiAgICAgIGlmICh0YWIuZmxvYXRCb3gucm93RG90cykge1xuICAgICAgICB0YWIuZmxvYXRCb3gucm93RG90cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgZnJlZUNvbHVtbnMgPSA0O1xuICAgICAgICAgIHN0ciArPSBgPHNwYW4gY2xhc3M9XCJyb3dkb3QtLXJvdyBcIj5gO1xuXG4gICAgICAgICAgcm93LmZvckVhY2goKGRvdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRhYi5sZWdlbmRzICYmIGRvdC50YWJLZXkpIHtcbiAgICAgICAgICAgICAgbGV0IGxlZ2VuZCA9IHRhYi5sZWdlbmRzLmZpbmQoKGwpID0+IGwua2V5ID09IGRvdC50YWJLZXkpO1xuICAgICAgICAgICAgICBpZiAobGVnZW5kICYmICFsZWdlbmQuYWN0aXZlKSByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBkYXRhRmxvYXRCb3ggPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgc2hvd0lmID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBoaWRlSWYgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBjb2xvclN0eWxlID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKGRvdC52YXJOYW1lKSB7XG4gICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhck5hbWUpO1xuICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSBwYXJzZUludChkYXRhRmxvYXRCb3gpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZG90LnZhclNob3cpIHtcbiAgICAgICAgICAgICAgc2hvd0lmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGRvdC52YXJTaG93KSk7XG4gICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA9IGRhdGFGbG9hdEJveCB8fCBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZG90LnZhckhpZGUpIHtcbiAgICAgICAgICAgICAgaGlkZUlmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGRvdC52YXJIaWRlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkb3Quc2hhcGUpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIHNoYXBlLVwiICsgZG90LnNoYXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZG90LmNvbG9yKSB7XG4gICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGRvdC5jb2xvcikpIHtcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7ZG90LmNvbG9yfWA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IGRvdC5jb2xvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGFGbG9hdEJveCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPiAwICYmXG4gICAgICAgICAgICAgIHNob3dJZiAmJlxuICAgICAgICAgICAgICAhaGlkZUlmICYmXG4gICAgICAgICAgICAgIGZyZWVDb2x1bW5zID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGxldCBuID0gZGF0YUZsb2F0Qm94ID4gZnJlZUNvbHVtbnMgPyBmcmVlQ29sdW1ucyA6IGRhdGFGbG9hdEJveDtcbiAgICAgICAgICAgICAgZnJlZUNvbHVtbnMgLT0gbjtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJyb3dkb3QtLWRvdCAke2NvbG9yQ2xhc3N9ICR7Y2xhc3NOYW1lfVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlfVwiPjwvZGl2PmA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHN0ciArPSBgPC9zcGFuPmA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICBzdHJFeHQgKz0gYFxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuXG4gICAgbGV0ICRlbGVtRXh0ID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHJFeHQpO1xuXG4gICAgJGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xuICAgICAgJGVsZW0uZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwibW91c2VPdmVyRmxvYXRCb3hcIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja0Zsb2F0Qm94XCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkZWxlbSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCRlbGVtRXh0KTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBEZXRhaWxEYXksIGRldGFsbGUgZGUgdmFsb3JlcyBkZSBpdGVtIHkgRGlhXG4gICAqIHNlIHVzYSBwYXJhOlxuICAgKiAgICAtIE11ZXN0cmEgbm9tYnJlIGRlIGl0ZW0geSBkZXRhbGxlc1xuICAgKiAgICAtIE11ZXN0cmEgY2Fwc3VsYXMgZGUgZGF0b3NcbiAgICogICAgLSBNdWVzdHJhIFBpbGxzLCBwaWxkb3JhcyBkZSBkYXRvcyByZXN1bWlkb3NcbiAgICogICAgLSBNdWVzdHJhIGFsZXJ0YXNcbiAgICogICAgLSBNdWVzdHJhIE1lbnNhamVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW0gLSBJdGVtIHJlbGFjaW9uYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29ubHlTdHJpbmdDb250ZW50ID0gZmFsc2VdIC0gcGFyYSBlc2NvZ2VyIHNpIGRldnVlbHZlIFN0cmluZyBvIERvbUVsZW1lbnRcbiAgICogQHJldHVybiB7U3RyaW5nfE9iamVjdH0gRWxlbWVudG8gY29tbyBTdHJpbmcgbyBEb21FbGVtZW50XG4gICAqL1xuICBjcmVhdGVEZXRhaWxEYXkoXG4gICAgY29uZmlnLFxuICAgIGl0ZW0gPSB7fSxcbiAgICBkYXRhRGF5LFxuICAgIHRhYlNlbGVjdGVkLFxuICAgIG9ubHlTdHJpbmdDb250ZW50ID0gZmFsc2VcbiAgKSB7XG4gICAgbGV0IHN0ciA9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWRldGFpbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICR7aXRlbS5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgJHtkYXRhRGF5ID8gZGF0ZVV0aWxzLmZvcm1hdERhdGVSZWFkZWFibGUoZGF0YURheS5kYXRlKSA6IFwiXCJ9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWRldGFpbCBsaXN0IGNvbHVtbi1mbGV4XCI+YDtcblxuICAgIC8vQ0FQU1VMRVNcbiAgICBsZXQgdmlzaWJsZUl0ZW1zQ291bnQgPSAwOyAvLyBDb250YWRvciBkZSBlbGVtZW50b3MgdmlzaWJsZXNcblxuICAgIGlmIChkYXRhRGF5KSB7XG4gICAgICBjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LmNhcHN1bGVzLmZvckVhY2goKGNhcCkgPT4ge1xuICAgICAgICAvL3BhcmEgY29tcHJvYmFyIHNpIHRpZW5lIGRhdG9zLCBzZSBvYnRpZW5lIGVsIHByaW1lciB2YWxvclxuICAgICAgICAvL2RlIGxhIGxpc3RhIGRlIHZhbHVlcyBkZSB1bmEgY2Fwc3VsYVxuICAgICAgICBsZXQgaGFzVmFsdWVzID1cbiAgICAgICAgICBjYXAudmFsdWVzLmZpbHRlcigodikgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXkudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgdmFsdWUgIT09IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgbGV0IGhpZGVJZiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjYXAuaGlkZUlmKSB7XG4gICAgICAgICAgaGlkZUlmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheS52YWx1ZXMsIGNhcC5oaWRlSWYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgbGV0IGNvbG9yU3R5bGUgPSBcIlwiO1xuXG4gICAgICAgIGlmIChjYXAuY29sb3IpIHtcbiAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihjYXAuY29sb3IpKSB7XG4gICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7Y2FwLmNvbG9yfTtgO1xuICAgICAgICAgICAgY29sb3JTdHlsZSArPSBgLS1sb2NhbC1jb2xvci1mb250OiAke2NhcC5jb2xvcn07YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sb3JDbGFzcyA9IGNhcC5jb2xvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc1ZhbHVlcyAmJiAhaGlkZUlmKSB7XG4gICAgICAgICAgdmlzaWJsZUl0ZW1zQ291bnQrKzsgLy8gSW5jcmVtZW50YXIgY29udGFkb3IgZGUgZWxlbWVudG9zIHZpc2libGVzXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsICR7Y29sb3JDbGFzc31cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZX1cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWljb24gJHtjYXAuc2hhcGUgfHwgXCJcIn0gXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICR7Y2FwLnRpdGxlIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGVzY3JpcHRpb25cIj4gYDtcblxuICAgICAgICAgIGNhcC52YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdi52YXJOYW1lXG4gICAgICAgICAgICAgID8gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXkudmFsdWVzLCB2LnZhck5hbWUpXG4gICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKGNhcC5pc0xhYmVsZWRBcnJheSkge1xuICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKCh2YWx1ZUxhYmVsZWQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgb3V0cHV0VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZU5hbWUgPSB2LnZhbHVlTmFtZSA/IHYudmFsdWVOYW1lIDogXCJ2YWx1ZVwiO1xuXG4gICAgICAgICAgICAgICAgbGV0IHRlbXBWYWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aCh2YWx1ZUxhYmVsZWQsIHZhbHVlTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGVtcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IHYucm91bmRcbiAgICAgICAgICAgICAgICAgICAgPyB1dGlscy5yb3VuZCh0ZW1wVmFsdWUsIHYucm91bmQpXG4gICAgICAgICAgICAgICAgICAgIDogdGVtcFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2LmZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB2LmZvcm1hdHRlcih2YWx1ZUxhYmVsZWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0VmFsdWUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB1dGlscy5mb3JtYXROdW1iZXIob3V0cHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0ciArPVxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgOiBgXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2MgJHt2LnNob3dDb2x1bW4gPyBcImRlc2MtY29sdW1uXCIgOiBcIlwifVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7di5oaWRlTGFiZWwgPyBcIlwiIDogdmFsdWVMYWJlbGVkLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXYgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbFwiPmAgK1xuICAgICAgICAgICAgICAgICAgICAgICh2LmhpZGVQcmVmZml4ICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmVmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3YucHJlZml4IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7b3V0cHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gICtcbiAgICAgICAgICAgICAgICAgICAgICAodi5oaWRlU3VmZml4ICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWZmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlTGFiZWxlZC5zdWZmaXggfHwgdi5zdWZmaXggfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGV0IG91dHB1dFZhbHVlID0gdi5yb3VuZCA/IHV0aWxzLnJvdW5kKHZhbHVlLCB2LnJvdW5kKSA6IHZhbHVlO1xuXG4gICAgICAgICAgICAgIGlmICh2LmZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gdi5mb3JtYXR0ZXIoeyBvcHRpb25zOiB2LCBkYXRhRGF5LCBvdXRwdXRWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0VmFsdWUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gdXRpbHMuZm9ybWF0TnVtYmVyKG91dHB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChvdXRwdXRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJlZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt2LnByZWZpeCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke291dHB1dFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VmZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt2LnN1ZmZpeCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgIDwvZGl2PmA7IC8vIGVuZCAuaXRlbS1kZXRhaWxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWdyZWdhciBjbGFzZSBzaW5nbGUtaXRlbSBzaSBzb2xvIGhheSB1biBlbGVtZW50byB2aXNpYmxlXG4gICAgY29uc3QgY29sdW1uQ2xhc3MgPVxuICAgICAgdmlzaWJsZUl0ZW1zQ291bnQgPT09IDFcbiAgICAgICAgPyBcImxpc3QgY29sdW1uLWZsZXggc2luZ2xlLWl0ZW1cIlxuICAgICAgICA6IFwibGlzdCBjb2x1bW4tZmxleFwiO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKFwibGlzdCBjb2x1bW4tZmxleFwiLCBjb2x1bW5DbGFzcyk7XG5cbiAgICBzdHIgKz0gYFxuICAgICAgICA8L2Rpdj5gOyAvLyBsaXN0LWRldGFpbFxuXG4gICAgLy9QSUxMU1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNWYXJOYW1lICYmXG4gICAgICBkYXRhRGF5ICYmXG4gICAgICBkYXRhRGF5LnZhbHVlc1tjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LnBpbGxzVmFyTmFtZV1cbiAgICApIHtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVsZW1lbnRzLWRldGFpbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj4gJHtjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LnBpbGxzVGl0bGV9IDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsZW1lbnRzLWxpc3RcIj5gO1xuXG4gICAgICBkYXRhRGF5LnZhbHVlc1tjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LnBpbGxzVmFyTmFtZV0uZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBlLnZhbHVlO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0VmFsdWUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHZhbHVlID0gdXRpbHMuZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudC1kZXRhaWxcIj5cbiAgICAgICAgICAgICAgPGI+JHtlLmxhYmVsfTwvYj5cbiAgICAgICAgICAgICAgJHt2YWx1ZX1cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9KTtcblxuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YDsgLy9lbmQgLmVsZW1lbnQtZGV0YWlsID4gLmVsZW1lbnQtbGlzdFxuICAgIH1cblxuICAgIC8vc3RyICs9IGA8L2Rpdj5gO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS5lcnJvcnMgJiYgZGF0YURheS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0YURheS5lcnJvcnMuZm9yRWFjaCgoZXJyKSA9PiB7XG4gICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0XCI+XG4gICAgICAgICAgICAke2ljb25zLmFsZXJ0fVxuICAgICAgICAgICAgJHtlcnIubGFiZWx9XG4gICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBtc2cgPSBudWxsO1xuICAgIGxldCBhdXRob3IgPSBudWxsO1xuICAgIGxldCBkYXRlTXNnID0gbnVsbDtcbiAgICBpZiAoZGF0YURheSAmJiB0YWJTZWxlY3RlZC5mbG9hdEJveCAmJiB0YWJTZWxlY3RlZC5mbG9hdEJveC5tZXNzYWdlUGF0aCkge1xuICAgICAgbXNnID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHRhYlNlbGVjdGVkLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoIW1zZyAmJiBkYXRhRGF5ICYmIGRhdGFEYXkubWVzc2FnZSAmJiBkYXRhRGF5Lm1lc3NhZ2UudmFsdWUpIHtcbiAgICAgIG1zZyA9IGRhdGFEYXkubWVzc2FnZS52YWx1ZTtcbiAgICAgIGF1dGhvciA9IGRhdGFEYXkubWVzc2FnZS5hdXRob3I7XG4gICAgICBkYXRlTXNnID0gZGF0ZVV0aWxzLmZvcm1hdERhdGVSZWFkZWFibGUobmV3IERhdGUoZGF0YURheS5tZXNzYWdlLmRhdGUpKTtcbiAgICB9XG5cbiAgICBpZiAobXNnKSB7XG4gICAgICAvL21zZyA9IG1zZy5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csICc8YnI+Jyk7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtc2otY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXNqXCI+XG4gICAgICAgICAgICA8cHJlPiR7bXNnIHx8IFwiXCJ9PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtc2otZGV0YWlsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW1haWxcIj4gJHthdXRob3IgfHwgXCJcIn0gPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGVcIj4gJHtkYXRlTXNnIHx8IFwiXCJ9IDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xuICAgIH1cblxuICAgIGxldCBzdHJDb250YWluZXIgPSBgPGRpdiBjbGFzcz1cImRldGFpbC1kYXkgZGQtaGlkZVwiPiAke3N0cn0gPC9kaXY+YDtcblxuICAgIGlmIChvbmx5U3RyaW5nQ29udGVudCkgcmV0dXJuIHN0cjtcblxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0ckNvbnRhaW5lcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBIVE1MIGRlIGRldGFpbERheVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSAtIEl0ZW0gcmVsYWNpb25hZG9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWFcbiAgICogQHJldHVybiB7U3RyaW5nfSBFbGVtZW50byBjb21vIFN0cmluZywgZGUgZGV0YWlsRGF5XG4gICAqL1xuICByZWRyYXdEZXRhaWxEYXkoY29uZmlnLCBpdGVtLCBkYXRhRGF5LCB0YWJTZWxlY3RlZCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZURldGFpbERheShjb25maWcsIGl0ZW0sIGRhdGFEYXksIHRhYlNlbGVjdGVkLCB0cnVlKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwb3NpY2lvbmEgRmxvYXRCb3hcbiAgICogdmVyaWZpY2Egc2kgZWwgcGFyZW50IGVzdGEgZGVzcGxlZ2FkbywgcGFyYSBvY3VsdGFyIGxvcyBkYXRvc1xuICAgKlxuICAgKiBTb2xvIGFjdHVhbGl6YSBsYXMgYWx0dXJhcyBkZSBsb3MgZmxvYXRib3hcbiAgICogbm8gcmVjcmVhIGxvcyBmbG9hdGJveCwgZXMgbWFzIG9wdGltb1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSAtIEl0ZW0gcmVsYWNpb25hZG9cbiAgICovXG4gIHJlcG9zaXRpb25GbG9hdEJveChjb25maWcsICRmbG9hdEJveENvbnRhaW5lcikge1xuICAgICRmbG9hdEJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsb2F0LWJveFwiKS5mb3JFYWNoKCgkZikgPT4ge1xuICAgICAgbGV0IGl0ZW1JZCA9ICRmLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICBsZXQgaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQoXG4gICAgICAgIHV0aWxzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpXG4gICAgICApO1xuICAgICAgbGV0IGl0ZW0sIHBhcmVudDtcbiAgICAgICh7IGl0ZW0sIHBhcmVudCB9ID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQsIFwiY2hpbGRcIiwgdHJ1ZSkpO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgbGV0IHRvcCA9IHV0aWxzLmdldFBvc2l0aW9uQnlJdGVtKGNvbmZpZywgaXRlbSk7XG4gICAgICAgICRmLnN0eWxlLnRvcCA9IHRvcCAqIGl0ZW1IZWlnaHQgKyBcInB4XCI7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmlzQ2xvc2VkKSB7XG4gICAgICAgICAgJGYuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoJGYuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSkge1xuICAgICAgICAgICRmLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBpbmRpY2Fkb3JlcyBkZSBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gRG9tIGRvbmRlIGNyZWEgbG9zIGVsZW1lbnRvcyBzZWxlY2Npb25hZG9zXG4gICAqIEBwYXJhbSB7T2JqZWN0W119IHNlbGVjdGVkIC0gQXJyYXkgY29uIGxvcyBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gcXVlIGNvbnRpZW5lIGxvcyBpbmRpY2Fkb3JlcyBkZSBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICovXG4gIHJlZHJhd1NlbGVjdEJvYXJkKCRlbGVtLCBzZWxlY3RlZCkge1xuICAgICRlbGVtLmlubmVySFRNTCA9IFwiXCI7XG4gICAgbGV0IGhhc051bWJlciA9IHRydWU7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT0gMSkgaGFzTnVtYmVyID0gZmFsc2U7XG5cbiAgICAgIHNlbGVjdGVkLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgbGV0IGF0dHJpYnV0ZXMgPSBbXTtcblxuICAgICAgICBpZiAoaGFzTnVtYmVyKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKHsgbmFtZTogXCJjYXAtYmFkZ2VcIiwgdmFsdWU6IHMuaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0ICRzID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJzZWxlY3RlZC1kYXlcIixcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgJHMuc3R5bGUubGVmdCA9IHMucG9zLmxlZnQgKyBcInB4XCI7XG4gICAgICAgICRzLnN0eWxlLnRvcCA9IHMucG9zLnRvcCArIFwicHhcIjtcbiAgICAgICAgJGVsZW0uYXBwZW5kKCRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIE9idGllbmUgU3RyaW5nIGNvbiBlc3RpbG9zIENTUyBkZSBsYSBwb3NpY2lvbiBkZSB1biBmbG9hdEJveFxuICAgKiBjYWxjdWxhZG8gc2VndW4gaXRlbSB5IGZlY2hhIGRlIGxvcyB2YWxvcmVzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhLCBwYXJhIHZlciBmZWNoYSBkZSBpbmljaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRvcyBkZWwgZGlhIGluZGljYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIC0gSXRlbSByZWxhY2lvbmFkb1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IFN0cmluZyBDU1MgdG9wIHkgbGVmdCAsIHBhcmEgcG9zaWNpb25hciBmbG9hdEJveCBlbiB0YWJsZVxuICAgKi9cbiAgZ2V0UG9zaXRpb25GbG9hdEJveChjb25maWcsIGRhdGEsIGl0ZW0sIHR5cGVOb2RlKSB7XG4gICAgbGV0IGxlZnQgPSBkYXRlVXRpbHMuZGlmZkRheXMoY29uZmlnLnRpbWVsaW5lLnN0YXJ0LCBkYXRhLmRhdGUpO1xuICAgIGxldCB0b3AgPSB1dGlscy5nZXRQb3NpdGlvbkJ5SXRlbShjb25maWcsIGl0ZW0sIHR5cGVOb2RlKTtcbiAgICBsZXQgZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWRheS13aWR0aFwiKSk7XG4gICAgbGV0IGl0ZW1IZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgICBsZWZ0ICo9IGRheVdpZHRoO1xuICAgIHRvcCAqPSBpdGVtSGVpZ2h0O1xuICAgIHJldHVybiBcInRvcDogXCIgKyB0b3AgKyBcIi41cHg7IGxlZnQ6XCIgKyBsZWZ0ICsgXCIuNXB4O1wiO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEJvdG9uIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIHByb3BpZWRhZGVzIHBhcmEgYm90b25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmNsYXNzTmFtZSAtIGNsYXNzZXMgY3NzIHBhcmEgYm90b25cbiAgICogQHBhcmFtIHsqfSBwcm9wcy5rZXkgLSBrZXkgcGFyYSBpZGVudGlmaWNhciBhIGJvdG9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5sYWJlbCAtIFRleHRvIGJvdG9uXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBib3RvbiBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUJ1dHRvbihwcm9wcykge1xuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCIke3Byb3BzLmNsYXNzTmFtZSB8fCBcIlwifVwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWwgfHwgXCJcIn1cbiAgICAgICAgICAgIDwvYnV0dG9uPmApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEJvdG9uZXMgZGUgZ3VhcmRhciB5IGNhbmNlbGFyIGxvcyBkYXRvcyBkZSBmb3JtdWxhcmlvIGRlbCBzaWRlYmFyIGRlcmVjaG9cbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGJvdG9uZXMgY3JlYWRvc1xuICAgKi9cbiAgY3JlYXRlTmF2UmlnaHRidXR0b25zKGNvbmZpZykge1xuICAgIGxldCBidG5TZWN0aW9uID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChcbiAgICAgIGA8ZGl2IGNsYXNzPVwiYnV0dG9uLXNlY3Rpb25cIj48L2Rpdj5gXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICBjb25maWcudGltZWxpbmUubmF2LnJpZ2h0ICYmXG4gICAgICBjb25maWcudGltZWxpbmUubmF2LnJpZ2h0LmhpZGVTYXZlQnV0dG9uICE9IHRydWVcbiAgICApIHtcbiAgICAgIGxldCBzYXZlQnRuID0gdGhpcy5jcmVhdGVCdXR0b24oe1xuICAgICAgICBsYWJlbDogXCJHdWFyZGFyXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJjYXAtYnRuLXJhaXNlZFwiLFxuICAgICAgfSk7XG5cbiAgICAgIGJ0blNlY3Rpb24uYXBwZW5kQ2hpbGQoc2F2ZUJ0bik7XG4gICAgICBzYXZlQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBzYXZlQnRuLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2F2ZU11bHRpSW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjb25maWcudGltZWxpbmUubmF2LnJpZ2h0ICYmXG4gICAgICBjb25maWcudGltZWxpbmUubmF2LnJpZ2h0LmhpZGVDYW5jZWxCdXR0b24gIT0gdHJ1ZVxuICAgICkge1xuICAgICAgY29uc3QgY2FuY2VsTGFiZWxCdXR0b24gPVxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LnJpZ2h0LmNhbmNlbExhYmVsQnV0dG9uIHx8IFwiQ2FuY2VsYXJcIjtcbiAgICAgIGxldCBjYW5jZWxCdG4gPSB0aGlzLmNyZWF0ZUJ1dHRvbih7XG4gICAgICAgIGxhYmVsOiBjYW5jZWxMYWJlbEJ1dHRvbixcbiAgICAgICAgY2xhc3NOYW1lOiBcImNhcC1idG4tb3V0bGluZVwiLFxuICAgICAgfSk7XG5cbiAgICAgIGJ0blNlY3Rpb24uYXBwZW5kQ2hpbGQoY2FuY2VsQnRuKTtcblxuICAgICAgY2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBjYW5jZWxCdG4uZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjYW5jZWxNdWx0aUlucHV0XCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ0blNlY3Rpb247XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtkYXRhRGF5ID0gbnVsbF0gLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZGF5U2VsZWN0ZWQgPSBudWxsXSAtIGRhdG9zIGRlbCBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0W119IFtzZWxlY3RlZCA9IFtdXSAtIGFycmF5IGRlIG9iamV0b3MsIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dChcbiAgICBwcm9wcyxcbiAgICBkYXRhRGF5ID0gbnVsbCxcbiAgICBkYXlTZWxlY3RlZCA9IG51bGwsXG4gICAgc2VsZWN0ZWQgPSBbXSxcbiAgICB0YWJTZWxlY3RlZFxuICApIHtcbiAgICBsZXQgciA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaWdub3JlUmVuZGVyID09IHRydWUpIHJldHVybiByO1xuXG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlIFwiY3VzdG9tXCI6XG4gICAgICAgIHIgPSBwcm9wcy5yZW5kZXJcbiAgICAgICAgICA/IHByb3BzLnJlbmRlcih7IHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCwgc2VsZWN0ZWQgfSlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHIuc2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIsIHByb3BzLmtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dFNlbGVjdChwcm9wcywgZGF0YURheSwgZGF5U2VsZWN0ZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0RmlsZShwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZpbGVMaW5rXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUZpbGVMaW5rKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVUZXh0KHByb3BzLCBzZWxlY3RlZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRpdGxlXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZVRpdGxlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0TnVtYmVyKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZmxvYXRcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRGbG9hdChwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRNZXNzYWdlKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRUZXh0QXJlYShwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNoZWNrYm94XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0Q2hlY2tib3gocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnB1dExpc3RcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRMaXN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlucHV0LWJveFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dEJveChwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlTGlzdChwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRhdGEtbGlzdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVEYXRhTGlzdChcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgIHRhYlNlbGVjdGVkXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dEJ1dHRvbihwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJ1dHRvbnMtZ3JvdXBcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRCdXR0b25zR3JvdXAocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0VGltZShwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlucHV0LXRleHRcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0VGV4dChwcm9wcywgZGF0YURheSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgY29uIGZvcm1hdG8gSG9yYSwgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogVXNhIDIgaW5wdXRzLCBob3JhIHkgbWludXRvc1xuICAgKlxuICAgKiBlbCB2YWx1ZSBxdWUgaW50ZXJwcmV0YSBlcyBTdHJpbmcgSEg6TU1cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtkYXRhRGF5ID0gbnVsbF0gLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0VGltZShwcm9wcywgZGF0YURheSkge1xuICAgIGxldCBoaFZhbHVlID0gXCJcIjtcbiAgICBsZXQgbW1WYWx1ZSA9IFwiXCI7XG5cbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdChcIjpcIik7XG4gICAgICAgIGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWwgfHwgXCJcIn1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJob3VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInRlc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjk5XCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7aGhWYWx1ZX1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN5bWJvbFwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWludXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTlcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhpbnRcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLnRleHRIaW50IHx8IFwiXCJ9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0ICRoaElucHV0ID0gJGVsZW0ucXVlcnlTZWxlY3RvcihcIi5ob3VyXCIpO1xuICAgIGxldCAkbW1JbnB1dCA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIubWludXRlc1wiKTtcblxuICAgICRoaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgJGhoSW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2hhbmdlVGltZUlucHV0SEhcIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBrZXk6IHByb3BzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBlLnNyY0VsZW1lbnQudmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAkbW1JbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICRtbUlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImNoYW5nZVRpbWVJbnB1dE1NXCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAga2V5OiBwcm9wcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogZS5zcmNFbGVtZW50LnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoJGhoSW5wdXQsICRlbGVtLCBwcm9wcyk7XG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoJG1tSW5wdXQsICRlbGVtLCBwcm9wcyk7XG5cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgVGV4dCBjb21vIGVsZW1lbnRvIERvbVxuICAgKiBTZSBjb25maWd1cmEgY29tbyBpbnB1dCwgcGVybyBubyBkZXZ1ZWx2ZSBkYXRvcywgZXMgdW4gdGV4dG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlVGV4dChwcm9wcywgc2VsZWN0ZWQpIHtcbiAgICBsZXQgbGFiZWwgPSBwcm9wcy5sYWJlbDtcbiAgICBpZiAocHJvcHMuZm9ybWF0dGVyKSB7XG4gICAgICBsYWJlbCA9IHByb3BzLmZvcm1hdHRlcih7IHNlbGVjdGVkIH0pO1xuICAgIH1cbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlIFwiIDogXCJcIn0gJHtcbiAgICAgICAgICAgIHByb3BzLnRvTGVmdCA/IFwidG8tbGVmdCBcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7cHJvcHMuY2xhc3NOYW1lcyB8fCBcIlwifVwiPlxuICAgICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5gKTtcbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgVGl0bGUgY29tbyBlbGVtZW50byBEb21cbiAgICogU2UgY29uZmlndXJhIGNvbW8gaW5wdXQsIHBlcm8gbm8gZGV2dWVsdmUgZGF0b3MsIGVzIHVuIHRleHRvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZVRpdGxlKHByb3BzKSB7XG4gICAgbGV0IGNsYXNzTmFtZXMgPSBcInRleHQtdGl0bGVcIjtcbiAgICBpZiAocHJvcHMuaXNTdWJ0aXRsZSkge1xuICAgICAgY2xhc3NOYW1lcyA9IFwidGV4dC1zdWJ0aXRsZVwiO1xuICAgIH1cbiAgICByZXR1cm4gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZXN9XCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+YCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgdGlwbyBOdW1lcmljbyBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXROdW1iZXIocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSB8fCBcIlwiO1xuXG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmNsYXNzTmFtZXMgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUtMiBcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLnN1ZmZpeCA/IFwiKFwiICsgcHJvcHMuc3VmZml4ICsgXCIpXCIgOiBcIlwifVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHt2YWx1ZX1cIj5cblxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGludFwiPlxuICAgICAgICAgICAgICAgICAgJHtwcm9wcy50ZXh0SGludCB8fCBcIlwifVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCBpbnB1dEVsZW0gPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcblxuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGlucHV0RWxlbSwgZWxlbSwgcHJvcHMpO1xuXG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgdGlwbyBGSWxlcGlja2VyIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dEZpbGUocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGxldCBmaWxlTmFtZSA9IFwiXCI7XG4gICAgbGV0IGZpbGVQYXRoID0gXCJcIjtcblxuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICAgIGZpbGVOYW1lID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLmZpbGVOYW1lVmFsdWUpO1xuICAgICAgZmlsZVBhdGggPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMuZmlsZVBhdGhWYWx1ZSk7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSB8fCBcIlwiO1xuICAgIGZpbGVOYW1lID0gZmlsZU5hbWUgfHwgXCJcIjtcbiAgICBmaWxlUGF0aCA9IGZpbGVQYXRoIHx8IFwiXCI7XG5cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuY2xhc3NOYW1lcyB8fCBcIlwifSAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWlucHV0LWZpbGVcIiA+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzbWFsbC1jbG9zZSBjbGVhci1maWxlLWlucHV0XCI+eDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bGFiZWwgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmF2LWlucHV0LWZpbGUtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICR7cHJvcHMucGlja2VyTGFiZWwgfHwgXCJTZWxlY2Npb25hciBBcmNoaXZvXCJ9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIHZhbHVlPVwiJHt2YWx1ZX1cIj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi1saW5rXCI+XG4gICAgICAgICAgICAgIDxhIGhyZWY9XCIke2ZpbGVQYXRofVwiIHRhcmdldD1cIl9ibGFua1wiID5cbiAgICAgICAgICAgICAgICAke2ZpbGVOYW1lfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0ICRpbnB1dEVsZW0gPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICBsZXQgJGNsZWFyQnRuID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiLmNsZWFyLWZpbGUtaW5wdXRcIik7XG4gICAgbGV0ICRmaWxlSW5wdXRMYWJlbCA9IGVsZW0ucXVlcnlTZWxlY3RvcihcIi5uYXYtaW5wdXQtZmlsZS1sYWJlbFwiKTtcblxuICAgICRpbnB1dEVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZXZ0KSA9PiB7XG4gICAgICBsZXQgZmlsZU5hbWUgPSAkaW5wdXRFbGVtLmZpbGVzWzBdLm5hbWU7XG4gICAgICAkZmlsZUlucHV0TGFiZWwudGV4dENvbnRlbnQgPSBmaWxlTmFtZTtcbiAgICB9KTtcblxuICAgICRjbGVhckJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dCkgPT4ge1xuICAgICAgJGlucHV0RWxlbS52YWx1ZSA9IFwiXCI7XG4gICAgICAkZmlsZUlucHV0TGFiZWwudGV4dENvbnRlbnQgPSBwcm9wcy5waWNrZXJMYWJlbCB8fCBcIlNlbGVjY2lvbmFyIEFyY2hpdm9cIjtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIGNyZWF0ZUZpbGVMaW5rKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IGZpbGVOYW1lID0gXCJcIjtcbiAgICBsZXQgZmlsZVBhdGggPSBcIlwiO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIC8vdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgICBmaWxlTmFtZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy5maWxlTmFtZVZhbHVlKTtcbiAgICAgIGZpbGVQYXRoID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLmZpbGVQYXRoVmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChmaWxlTmFtZSA9PSBcIlwiKSByZXR1cm4gbnVsbDtcblxuICAgIGZpbGVOYW1lID0gZmlsZU5hbWUgfHwgXCJcIjtcbiAgICBmaWxlUGF0aCA9IGZpbGVQYXRoIHx8IFwiXCI7XG5cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuY2xhc3NOYW1lcyB8fCBcIlwifSAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi1saW5rXCI+XG4gICAgICAgICAgICAgIDxhIGhyZWY9XCIke2ZpbGVQYXRofVwiIHRhcmdldD1cIl9ibGFua1wiID5cbiAgICAgICAgICAgICAgICAke2ZpbGVOYW1lfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgbGlzdGEgZGUgSW5wdXRzLCBjb24gYXJyYXkgZGUgdmFsb3JlcywgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZGF5U2VsZWN0ZWQgPSBudWxsXSAtIGRhdG9zIGRlbCBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0TGlzdChwcm9wcywgZGF0YURheSwgZGF5U2VsZWN0ZWQgPSBudWxsKSB7XG4gICAgbGV0IGlucHV0TGlzdCA9IFtdO1xuXG4gICAgLy9vYnRpZW5lIGlucHV0cyBkZWZhdWx0LCBwYXJhIGNyZWFybG9zLCBzaW4gdmFsb3Jlc1xuICAgIGlmIChcbiAgICAgIGRheVNlbGVjdGVkICYmXG4gICAgICBBcnJheS5pc0FycmF5KGRheVNlbGVjdGVkLml0ZW0udmFsdWVzW3Byb3BzLmlucHV0TGlzdF0pXG4gICAgKSB7XG4gICAgICBpbnB1dExpc3QgPSBkYXlTZWxlY3RlZC5pdGVtLnZhbHVlc1twcm9wcy5pbnB1dExpc3RdLm1hcCgoaW5wdXRSb3cpID0+IHtcbiAgICAgICAgLy9saW1waWEgaW5wdXRMaXN0IGlucHV0c1xuICAgICAgICBpbnB1dFJvdy5pbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgICAgIGlucHV0LnZhbHVlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vb2J0aWVuZSB2YWxvcmVzIGRlbCBkaWFcbiAgICAgICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgICAgICBsZXQgaW5wdXRWYWx1ZXMgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFsdWVzUGF0aCk7XG5cbiAgICAgICAgICAvL2F1dG9ycmVsbGVuYVxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlcykge1xuICAgICAgICAgICAgaW5wdXRSb3cuaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBpbnB1dFZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09IGlucHV0Um93LmlkKTtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZXMgPyB2YWx1ZXNbaW5wdXQudmFyTmFtZV0gOiBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlucHV0Um93O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IGA8ZGl2IGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCIgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLWxpc3QgJHtcbiAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgfSBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj4gXG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgIGlucHV0TGlzdC5mb3JFYWNoKChpbnB1dFJvdykgPT4ge1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnRvUmlnaHQgPyBcInRvLXJpZ2h0XCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICB9XCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtpbnB1dFJvdy5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YDtcblxuICAgICAgaW5wdXRSb3cuaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgIHN0ciArPSBgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi1jb2xcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtpbnB1dC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWlkPVwiJHtpbnB1dFJvdy5pZH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWxhYmVsPVwiJHtpbnB1dC5sYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWlucHV0IHNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7aW5wdXQudmFsdWV9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9KTtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH0pO1xuICAgIHN0ciArPSBgPC9kaXY+YDtcblxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuXG4gICAgbGV0IGlucHV0c0VsZW0gPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKTtcbiAgICBpbnB1dHNFbGVtLmZvckVhY2goKGlucHV0RWxlbSkgPT5cbiAgICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGlucHV0RWxlbSwgZWxlbSwgcHJvcHMpXG4gICAgKTtcbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICBjcmVhdGVJbnB1dFNlbGVjdChwcm9wcywgZGF0YURheSwgZGF5U2VsZWN0ZWQgPSBudWxsKSB7XG4gICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICBsZXQgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnM7XG5cbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgbGV0IHZhbCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICAgIHZhbHVlID0gdmFsID8gdmFsLnZhbHVlIDogbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gYDxkaXYgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIiBjbGFzcz1cIiR7XG4gICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgIH1cIiA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiBcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJpbnB1dC1zZWxlY3RcIj5cblxuICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgJHt2YWx1ZSA9PSBudWxsID8gXCJzZWxlY3RlZFwiIDogXCJcIn0+XG4gICAgICAgICAgICAgICAgICAke3Byb3BzLm5vRGF0YUxhYmVsIHx8IFwiLS0gc2luIGFzaWduYXIgLS1cIn1cbiAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG5cbiAgICAgICAgYDtcblxuICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiJHtvcHRpb24uaWR9XCIgJHtcbiAgICAgICAgICAgICAgICAgICBvcHRpb24uaWQgPT0gdmFsdWUgPyBcInNlbGVjdGVkXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgICR7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICBgO1xuICAgIH0pO1xuICAgIHN0ciArPSBgXG5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG5cbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCBkZSB0ZXh0byBUZXh0QXJlYSBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRUZXh0QXJlYShwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgIH1cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJcIiB2YWx1ZT1cIiR7dmFsdWV9XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCBpbnB1dEVsZW0gPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJ0ZXh0YXJlYVwiKTtcbiAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0sIGVsZW0sIHByb3BzKTtcbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCBkZSBNZW5zYWplIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqIHV0aWxpemEgVGV4dEFyZWFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0TWVzc2FnZShwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IGRhdGFEYXkgPyB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSkgOiBudWxsO1xuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gdG8tbGVmdCBtc2otaW5wdXQtY29udGFpbmVyICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCJcbiAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgIE1lbnNhamVcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm1zalwiPiR7dmFsdWUgfHwgXCJcIn08L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0IGlucHV0RWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcInRleHRhcmVhXCIpO1xuICAgIC8vdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtKTtcbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCBkZSB0ZXh0byBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRUZXh0KHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibmF2LWlucHV0XCIgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0IGlucHV0RWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGlucHV0RWxlbSwgZWxlbSwgcHJvcHMpO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IE51bWVybyBGbG90YW50ZSwgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0RmxvYXQocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cIm5hdi1pbnB1dFwiIHZhbHVlPVwiJHt2YWx1ZX1cIj5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCBpbnB1dEVsZW0gPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0sIGVsZW0sIHByb3BzKTtcbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICBjcmVhdGVEYXRhTGlzdChwcm9wcywgZGF0YURheSwgZGF5U2VsZWN0ZWQsIHNlbGVjdGVkLCB0YWJTZWxlY3RlZCkge1xuICAgIGxldCBsaXN0ID0gW107XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIGxpc3QgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSkgfHwgW107XG4gICAgfVxuXG4gICAgbGV0IHNlYXJjaElucHV0ID0gcHJvcHMuaGlkZVNlYXJjaFxuICAgICAgPyBcIlwiXG4gICAgICA6IGAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cImJ1c2NhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VhcmNoLWlucHV0LWNsZWFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7aWNvbnMuY2xvc2VJY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICBsZXQgZWRpdEJ0biA9IFwiXCI7XG5cbiAgICBpZiAocHJvcHMuZWRpdEJ1dHRvbikge1xuICAgICAgZWRpdEJ0biA9IGA8YnV0dG9uIGNsYXNzPVwiY2FwLWJ0bi1yYWlzZWQgY2FwLWJ0bi1zbSBlZGl0LWJ0blwiIGlucHV0LWtleT1cIiR7cHJvcHMuZWRpdEJ1dHRvbi5rZXl9XCI+XG4gICAgICAgICAgICAgICAgICAgICR7cHJvcHMuZWRpdEJ1dHRvbi5sYWJlbH0gXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gYDtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAke2VkaXRCdG59XHRcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3ggXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICR7c2VhcmNoSW5wdXR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+IGA7XG5cbiAgICBsZXQgJGVsID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgIGxldCAkc2VhcmNoSW5wdXQgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXRcIik7XG4gICAgbGV0ICRzZWFyY2hJbnB1dENsZWFyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0LWNsZWFyXCIpO1xuICAgIGxldCAkaW5wdXRCb3ggPSAkZWwucXVlcnlTZWxlY3RvcihcIi5pbnB1dC1ib3hcIik7XG5cbiAgICBsZXQgJGl0ZW1zID0gbGlzdC5tYXAoKGl0ZW0sIGopID0+IHtcbiAgICAgIGxldCBsYWJlbCA9XG4gICAgICAgIHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lTGFiZWwpIHx8IGRhdGFEYXkubGFiZWwgfHwgXCJfX1wiO1xuXG4gICAgICBsZXQgJGVsSXRlbSA9IHRoaXMuY3JlYXRlRGF0YUxpc3RJdGVtKHtcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHZhbHVlVGV4dDogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVWYWx1ZVRleHQpIHx8IFwiXCIsXG4gICAgICAgIHN1YlRleHQ6IHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lU3ViVGV4dCkgfHwgXCJcIixcbiAgICAgICAgaWQ6IFwibGlzdC1pdGVtLVwiICsgKGRhdGFEYXkuaWQgfHwgaiksXG4gICAgICAgIGtleTogXCJsaXN0LWl0ZW0tXCIgKyAoZGF0YURheS5pZCB8fCBqKSxcbiAgICAgICAgdG9vbHRpcDogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVUb29sdGlwKSB8fCBsYWJlbCxcbiAgICAgICAgLy9jb2xvckljb246IFwiYy1yZWRcIixcbiAgICAgICAgbGluazogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVMaW5rKSB8fCBudWxsLFxuICAgICAgICBzdWZmaXg6IHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lU3VmZml4KSB8fCBcIlwiLFxuICAgICAgICAvL3ZhbHVlOiBKU09OLnN0cmluZ2lmeSh1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZUlucHV0KSkgfHwge31cbiAgICAgIH0pO1xuICAgICAgJGlucHV0Qm94LmFwcGVuZENoaWxkKCRlbEl0ZW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCRzZWFyY2hJbnB1dCkge1xuICAgICAgJHNlYXJjaElucHV0Q2xlYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9KTtcblxuICAgICAgJHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0ICRpbnB1dHMgPSBbXTtcbiAgICAgICAgJGlucHV0cyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvblwiKSB8fCBbXTtcbiAgICAgICAgJGlucHV0cy5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgIGxldCBsYWJlbCA9ICRpLmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgICAgICAgIGxldCBzZWFyY2ggPSAkc2VhcmNoSW5wdXQudmFsdWU7XG4gICAgICAgICAgaWYgKGxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAkaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lZGl0QnV0dG9uLm9uQ2xpY2spIHtcbiAgICAgIGxldCBidXR0b24gPSAkZWwucXVlcnlTZWxlY3RvcihcImJ1dHRvbi5lZGl0LWJ0blwiKTtcbiAgICAgIGlmIChidXR0b24gJiYgcHJvcHMuZWRpdEJ1dHRvbikge1xuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PlxuICAgICAgICAgIHByb3BzLmVkaXRCdXR0b24ub25DbGljayh7XG4gICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgZGF0YURheSxcbiAgICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAkZWxlbWVudDogJGVsLFxuICAgICAgICAgICAgdGFiU2VsZWN0ZWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgICRpdGVtcy5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAkZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgcHJvcHMuZWRpdEJ1dHRvbi5vbkNsaWNrKHtcbiAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgICAgZGF5U2VsZWN0ZWQsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgICRlbGVtZW50OiAkZWwsXG4gICAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGVsO1xuICB9LFxuXG4gIGNyZWF0ZURhdGFMaXN0SXRlbSh7XG4gICAgbGFiZWwgPSBcIlwiLFxuICAgIHZhbHVlVGV4dCA9IFwiXCIsXG4gICAgc3ViVGV4dCA9IFwiXCIsXG4gICAgaWQgPSBcIlwiLFxuICAgIGtleSA9IFwiXCIsXG4gICAgdG9vbHRpcCA9IFwiXCIsXG4gICAgY29sb3JJY29uID0gXCJcIixcbiAgICBsaW5rID0gbnVsbCxcbiAgICBzdWZmaXggPSBudWxsLFxuICAgIHZhbHVlID0gXCJcIixcbiAgfSkge1xuICAgIGxldCB0b29sdGlwU3RyID0gXCJcIjtcbiAgICBsZXQgaWNvblN0ciA9IG51bGw7XG4gICAgbGV0IGxpbmtTdHIgPSBcIlwiO1xuICAgIGxldCBzdHIgPSBcIlwiO1xuXG4gICAgaWYgKHRvb2x0aXApIHtcbiAgICAgIHRvb2x0aXBTdHIgPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICR7dG9vbHRpcH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuXG4gICAgaWYgKGNvbG9ySWNvbikge1xuICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoaXRlbUZvcm1hdGVkLmNvbG9ySWNvbikpIHtcbiAgICAgICAgaWNvblN0ciA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiR7Y29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWNvblN0ciA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uICR7Y29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5rKSB7XG4gICAgICBsaW5rU3RyID0gYDxhIGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7bGlua31cIj4ke2ljb25zLmxpbmtJY29ufTwvYT4gYDtcbiAgICB9XG5cbiAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbiBjbGlja2VhYmxlICR7XG4gICAgICAgICAgICAgIGljb25TdHIgPyBcImhhcy1pY29uXCIgOiBcIlwiXG4gICAgICAgICAgICB9IFwiIFxuICAgICAgICAgICAgICAgIGxhYmVsPVwiJHtsYWJlbH1cIiBcbiAgICAgICAgICAgICAgICBkYXRhLWlkPVwiJHtpZH1cIlxuICAgICAgICAgICAgICAgIGRhdGEta2V5PVwiJHtrZXl9XCJcbiAgICAgICAgICAgICAgICBkYXRhLXZhbHVlPVwiJHt2YWx1ZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgJHtpY29uU3RyIHx8IFwiXCJ9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZXNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICR7bGFiZWx9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXN1YnRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICR7c3ViVGV4dH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tY29udGVudFwiID5cbiAgICAgICAgICAgICAgICAgICR7dmFsdWVUZXh0fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXN1ZmZpeFwiID5cbiAgICAgICAgICAgICAgICAgICR7c3VmZml4fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgJHtsaW5rU3RyfVxuXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICR7dG9vbHRpcFN0cn1cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgfSxcblxuICBjcmVhdGVMaXN0KHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHRhYnNDb250YWluZXIgPSBcIlwiO1xuXG4gICAgaWYgKHByb3BzLnRhYnMpIHtcbiAgICAgIGxldCB0YWJzID0gXCJcIjtcbiAgICAgIHByb3BzLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIHRhYnMgKz0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94LXRhYlwiIHRhYi1rZXk9XCIke3RhYi5rZXl9XCI+XG4gICAgICAgICAgJHt0YWIubmFtZX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuXG4gICAgICB0YWJzQ29udGFpbmVyID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94LXRhYi1jb250YWluZXJcIj5cbiAgICAgICAgJHt0YWJzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgbGV0IHNlYXJjaElucHV0ID0gYFxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgPGlucHV0IGlkPVwiXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cImJ1c2NhclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VhcmNoLWlucHV0LWNsZWFyXCI+XG4gICAgICAgICAke2ljb25zLmNsb3NlSWNvbn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuXG4gICAgbGV0IHN0ciA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJ9IFwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICB9XCI+XG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICR7dGFic0NvbnRhaW5lcn1cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveCBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICAke3NlYXJjaElucHV0fVxuICAgICAgYDtcblxuICAgIC8vVE9ETyBvYnRlbmVyIGlucHV0IHNlZ3VuIGZpbGFcbiAgICBpZiAocHJvcHMuaW5wdXRzKSB7XG4gICAgICBwcm9wcy5pbnB1dHMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICBpZiAoaS5pc1RpdGxlKSB7XG4gICAgICAgICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgICAgICAgIGxldCBpY29uID0gbnVsbDtcblxuICAgICAgICAgIGlmIChpLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRvb2x0aXAgPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICR7aS50b29sdGlwfVxuICAgICAgICAgICAgICAgICAgICAke2kuc3VmZml4ID8gXCIoXCIgKyBpLnN1ZmZpeCArIFwiKVwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkuY29sb3JJY29uKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihpLmNvbG9ySWNvbikpIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb24gJHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbiBpcy10aXRsZSAgJHtcbiAgICAgICAgICAgICAgaWNvbiA/IFwiaGFzLWljb25cIiA6IFwiXCJcbiAgICAgICAgICAgIH1cIiBpbnB1dC10YWIta2V5PVwiJHtpLnRhYktleSB8fCBcIlwifVwiIGxhYmVsPVwiJHtpLmxhYmVsfVwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgJHtpY29uIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICR7aS5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgJHt0b29sdGlwfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGljb24gPSBudWxsO1xuICAgICAgICAgIGxldCBsaW5rID0gXCJcIjtcblxuICAgICAgICAgIGlmIChpLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRvb2x0aXAgPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICR7aS50b29sdGlwfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5jb2xvckljb24pIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGkuY29sb3JJY29uKSkge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmxpbmspIHtcbiAgICAgICAgICAgIGxpbmsgPSBgPGEgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJHtpLmxpbmt9XCI+XG4gICAgICAgICAgICAgICAgJHtpY29ucy5saW5rSWNvbn1cbiAgICAgICAgICAgICAgICA8L2E+IGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24gICR7XG4gICAgICAgICAgICAgIGljb24gPyBcImhhcy1pY29uXCIgOiBcIlwiXG4gICAgICAgICAgICB9XCIgaW5wdXQtdGFiLWtleT1cIiR7aS50YWJLZXkgfHwgXCJcIn1cIiBsYWJlbD1cIiR7aS5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgPGxhYmVsPlxuXG4gICAgICAgICAgICAgICAgJHtpY29ufVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICR7aS5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXN1ZmZpeFwiID4ke1xuICAgICAgICAgICAgICAgICAgaS5zdWZmaXggPyBcIihcIiArIGkuc3VmZml4ICsgXCIpXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuXG4gICAgICAgICAgICAgICAgJHtsaW5rfVxuXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhcnRcIj4gc3RhcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbmRcIj4gZW5kIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICR7dG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0ciArPSBgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+IGA7XG5cbiAgICBsZXQgJGVsID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgIGxldCAkdGFicyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmlucHV0LWJveC10YWJbdGFiLWtleV1cIikgfHwgW107XG4gICAgbGV0ICRzZWFyY2hJbnB1dCA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1pbnB1dFwiKSB8fCBudWxsO1xuICAgIGxldCAkc2VhcmNoSW5wdXRDbGVhciA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1pbnB1dC1jbGVhclwiKSB8fCBudWxsO1xuXG4gICAgJHRhYnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RJbnB1dEJveFRhYih0LCAkZWwpO1xuICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoJHNlYXJjaElucHV0Q2xlYXIpIHtcbiAgICAgICRzZWFyY2hJbnB1dENsZWFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCRzZWFyY2hJbnB1dCkge1xuICAgICAgJHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0ICR0YWJTZWxlY3RlZCA9XG4gICAgICAgICAgJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuaW5wdXQtYm94LXRhYlt0YWIta2V5XS5hY3RpdmVcIikgfHwgbnVsbDtcbiAgICAgICAgbGV0ICRpbnB1dHMgPSBbXTtcbiAgICAgICAgaWYgKCR0YWJTZWxlY3RlZCkge1xuICAgICAgICAgIGxldCB0YWJLZXkgPSAkdGFiU2VsZWN0ZWQuZ2V0QXR0cmlidXRlKFwidGFiLWtleVwiKTtcbiAgICAgICAgICAkaW5wdXRzID1cbiAgICAgICAgICAgICRlbC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICBcIi5taW5pLWlucHV0LXNlY3Rpb25baW5wdXQtdGFiLWtleT0nXCIgKyB0YWJLZXkgKyBcIiddXCJcbiAgICAgICAgICAgICkgfHwgW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGlucHV0cyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvblwiKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgICAkaW5wdXRzLmZvckVhY2goKCRpKSA9PiB7XG4gICAgICAgICAgbGV0IGxhYmVsID0gJGkuZ2V0QXR0cmlidXRlKFwibGFiZWxcIik7XG4gICAgICAgICAgbGV0IHNlYXJjaCA9ICRzZWFyY2hJbnB1dC52YWx1ZTtcbiAgICAgICAgICBpZiAobGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICRpLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkaS5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RJbnB1dEJveFRhYihfLmZpcnN0KCR0YWJzKSwgJGVsKTtcblxuICAgIHJldHVybiAkZWw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXRCb3gsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqIHVuIElucHV0Qm94IGVzIHVuIGNvbnRlbmVkb3IgY29uIHVuYSBsaXN0YSBkZSBpbnB1dHNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0Qm94KHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gW107XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgIH1cblxuICAgIGxldCB0YWJzQ29udGFpbmVyID0gXCJcIjtcblxuICAgIGlmIChwcm9wcy50YWJzKSB7XG4gICAgICBsZXQgdGFicyA9IFwiXCI7XG4gICAgICBwcm9wcy50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICB0YWJzICs9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveC10YWJcIiB0YWIta2V5PVwiJHt0YWIua2V5fVwiPlxuICAgICAgICAgICR7dGFiLm5hbWV9XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICB9KTtcblxuICAgICAgdGFic0NvbnRhaW5lciA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveC10YWItY29udGFpbmVyXCI+XG4gICAgICAgICR7dGFic31cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH1cblxuICAgIGxldCBzZWFyY2hJbnB1dCA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgIDxpbnB1dCBpZD1cIlwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIlwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJidXNjYXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jbGVhclwiPlxuICAgICAgICAgJHtpY29ucy5jbG9zZUljb259XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgYDtcblxuICAgIGxldCBzdHIgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAke3RhYnNDb250YWluZXJ9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3ggXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgJHtzZWFyY2hJbnB1dH1cbiAgICAgIGA7XG5cbiAgICBpZiAocHJvcHMuaW5wdXRzKSB7XG4gICAgICBwcm9wcy5pbnB1dHMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICBpZiAoaS5pc1RpdGxlKSB7XG4gICAgICAgICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgICAgICAgIGxldCBpY29uID0gXCJcIjtcblxuICAgICAgICAgIGlmIChpLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRvb2x0aXAgPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICR7aS50b29sdGlwfVxuICAgICAgICAgICAgICAgICAgICAke2kuc3VmZml4ID8gXCIoXCIgKyBpLnN1ZmZpeCArIFwiKVwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkuY29sb3JJY29uKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihpLmNvbG9ySWNvbikpIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb24gJHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbiBpcy10aXRsZVwiIGlucHV0LXRhYi1rZXk9XCIke1xuICAgICAgICAgICAgICBpLnRhYktleSB8fCBcIlwiXG4gICAgICAgICAgICB9XCIgbGFiZWw9XCIke2kubGFiZWx9XCI+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAke2ljb259XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICR7aS5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgJHt0b29sdGlwfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdmFsdWVfZm91bmQgPSB2YWx1ZSA/IHZhbHVlLmZpbmQoKHZhbCkgPT4gdmFsLmlkID09IGkuaWQpIDogbnVsbDtcbiAgICAgICAgICBsZXQgdiA9IHZhbHVlX2ZvdW5kIHx8IFwiXCI7XG4gICAgICAgICAgbGV0IGlucHV0VmFsdWUgPVxuICAgICAgICAgICAgcHJvcHMudmFyTmFtZUlucHV0ICYmIHZbcHJvcHMudmFyTmFtZUlucHV0XVxuICAgICAgICAgICAgICA/IHZbcHJvcHMudmFyTmFtZUlucHV0XVxuICAgICAgICAgICAgICA6IHYudmFsdWU7XG4gICAgICAgICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgICAgICAgIGxldCBpY29uID0gXCJcIjtcbiAgICAgICAgICBsZXQgbGluayA9IFwiXCI7XG5cbiAgICAgICAgICBpZiAoaS50b29sdGlwKSB7XG4gICAgICAgICAgICB0b29sdGlwID0gYFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAke2kudG9vbHRpcH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkuY29sb3JJY29uKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihpLmNvbG9ySWNvbikpIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb24gJHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5saW5rKSB7XG4gICAgICAgICAgICBsaW5rID0gYDxhIGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7aS5saW5rfVwiPlxuICAgICAgICAgICAgICAgICR7aWNvbnMubGlua0ljb259XG4gICAgICAgICAgICAgICAgPC9hPiBgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICAgIGljb24gPyBcImhhcy1pY29uXCIgOiBcIlwiXG4gICAgICAgICAgICB9XCIgaW5wdXQtdGFiLWtleT1cIiR7aS50YWJLZXkgfHwgXCJcIn1cIiBsYWJlbD1cIiR7aS5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbmktaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWlkPVwiJHtpLmlkIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke2kua2V5IHx8IGkubGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7aW5wdXRWYWx1ZSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICAgICAgJHtpY29uIHx8IFwiXCJ9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgJHtpLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4XCIgPiR7XG4gICAgICAgICAgICAgICAgICBpLnN1ZmZpeCA/IFwiKFwiICsgaS5zdWZmaXggKyBcIilcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAke2xpbmt9XG5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgJHt0b29sdGlwfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RyICs9IGBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj4gYDtcblxuICAgIGxldCAkZWwgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gICAgbGV0ICR0YWJzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaW5wdXQtYm94LXRhYlt0YWIta2V5XVwiKSB8fCBbXTtcbiAgICBsZXQgJGlucHV0cyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXQubWluaS1pbnB1dFwiKSB8fCBbXTtcbiAgICBsZXQgJHNlYXJjaElucHV0ID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0XCIpIHx8IG51bGw7XG4gICAgbGV0ICRzZWFyY2hJbnB1dENsZWFyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0LWNsZWFyXCIpIHx8IG51bGw7XG5cbiAgICAkdGFicy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdElucHV0Qm94VGFiKHQsICRlbCk7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICgkc2VhcmNoSW5wdXRDbGVhcikge1xuICAgICAgJHNlYXJjaElucHV0Q2xlYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoJHNlYXJjaElucHV0KSB7XG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgJHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgJHRhYlNlbGVjdGVkID1cbiAgICAgICAgICAkZWwucXVlcnlTZWxlY3RvcihcIi5pbnB1dC1ib3gtdGFiW3RhYi1rZXldLmFjdGl2ZVwiKSB8fCBudWxsO1xuICAgICAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgICAgICBpZiAoJHRhYlNlbGVjdGVkKSB7XG4gICAgICAgICAgbGV0IHRhYktleSA9ICR0YWJTZWxlY3RlZC5nZXRBdHRyaWJ1dGUoXCJ0YWIta2V5XCIpO1xuICAgICAgICAgICRpbnB1dHMgPVxuICAgICAgICAgICAgJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgIFwiLm1pbmktaW5wdXQtc2VjdGlvbltpbnB1dC10YWIta2V5PSdcIiArIHRhYktleSArIFwiJ11cIlxuICAgICAgICAgICAgKSB8fCBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaW5wdXRzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uXCIpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgICRpbnB1dHMuZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSAkaS5nZXRBdHRyaWJ1dGUoXCJsYWJlbFwiKTtcbiAgICAgICAgICBsZXQgc2VhcmNoID0gJHNlYXJjaElucHV0LnZhbHVlO1xuICAgICAgICAgIGlmIChsYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdElucHV0Qm94VGFiKF8uZmlyc3QoJHRhYnMpLCAkZWwpO1xuXG4gICAgJGlucHV0cy5mb3JFYWNoKChpKSA9PiB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpLCAkZWwsIHByb3BzKSk7XG5cbiAgICByZXR1cm4gJGVsO1xuICB9LFxuXG4gIHNlbGVjdElucHV0Qm94VGFiKCR0YWIsICRlbCkge1xuICAgIGxldCAkdGFicyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmlucHV0LWJveC10YWJbdGFiLWtleV1cIikgfHwgW107XG4gICAgbGV0ICRpbnB1dFNlY3Rpb25zID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uXCIpIHx8IFtdO1xuXG4gICAgJHRhYnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgdC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgIH0pO1xuXG4gICAgaWYgKCR0YWIpIHtcbiAgICAgICR0YWIuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuICAgICAgJGlucHV0U2VjdGlvbnMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICBsZXQga2V5ID0gaS5nZXRBdHRyaWJ1dGUoXCJpbnB1dC10YWIta2V5XCIpO1xuICAgICAgICBpZiAoa2V5ID09ICR0YWIuZ2V0QXR0cmlidXRlKFwidGFiLWtleVwiKSkge1xuICAgICAgICAgIGkuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaS5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIENoZWNrYm94LCBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRDaGVja2JveChwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgIH1cbiAgICBsZXQgciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgPGxhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgICAgICB9XCIgJHt2YWx1ZSA/IFwiY2hlY2tlZFwiIDogXCJcIn0+XG4gICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PmApO1xuXG4gICAgcmV0dXJuIHI7XG4gIH0sXG5cbiAgY3JlYXRlSW5wdXRCdXR0b25zR3JvdXAocHJvcHMpIHtcbiAgICBsZXQgJGNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtZ3JvdXBcIj4gPC9kaXY+XG4gICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCAkY29udGFpbmVyQnV0dG9uR3JvdXAgPSAkY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9ucy1ncm91cFwiKTtcblxuICAgIGxldCAkYnV0dG9ucyA9IFtdO1xuICAgICRidXR0b25zID0gcHJvcHMuYnV0dG9ucy5tYXAoKGJ1dHRvblByb3ApID0+IHtcbiAgICAgIGxldCBidXR0b25TdHIgPSBgXG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgbmFtZT1cIiR7YnV0dG9uUHJvcC5rZXkgfHwgXCJcIn1cIiBcbiAgICAgICAgICBpbnB1dC1rZXk9XCIke2J1dHRvblByb3Aua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICBjbGFzcz1cImNhcC1idG4tb3V0bGluZSBjYXAtYnRuLXNtICR7XG4gICAgICAgICAgICBidXR0b25Qcm9wLmlzU2VsZWN0ZWQgPyBcInNlbGVjdGVkXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIj5cbiAgICAgICAgICAke2J1dHRvblByb3AubGFiZWx9XG4gICAgICAgIDwvYnV0dG9uPmA7XG5cbiAgICAgIGxldCAkYnV0dG9uID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChidXR0b25TdHIpO1xuICAgICAgJGNvbnRhaW5lckJ1dHRvbkdyb3VwLmFwcGVuZCgkYnV0dG9uKTtcblxuICAgICAgJGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmlzU2VsZWN0YWJsZSkge1xuICAgICAgICAgICRidXR0b25zLmZvckVhY2goKCRiKSA9PiAkYi5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0ZWRcIikpO1xuICAgICAgICAgICRidXR0b24uY2xhc3NMaXN0LmFkZChcInNlbGVjdGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJ1dHRvblByb3Aub25DbGljayh7IHByb3BzLCBldmVudDogZSwgYnV0dG9uc0VsZW1lbnRzOiAkYnV0dG9ucyB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICRidXR0b247XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGNvbnRhaW5lcjtcbiAgfSxcblxuICBjcmVhdGVJbnB1dEJ1dHRvbihwcm9wcywgZGF0YURheSkge1xuICAgIGxldCByID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICBuYW1lPVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjYXAtYnRuLW91dGxpbmVcIj5cbiAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCBidXR0b24gPSByLnF1ZXJ5U2VsZWN0b3IoXCJidXR0b25cIik7XG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT5cbiAgICAgIHByb3BzLm9uQ2xpY2soeyBwcm9wcywgZXZlbnQ6IGUsIGRhdGFEYXkgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHI7XG4gIH0sXG5cbiAgYWRkS2V5RG93bklucHV0RXZlbnRzKCRpbnB1dCwgJGlucHV0Q29udGFpbmVyLCBwcm9wcykge1xuICAgICRpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAvL0VOVEVSXG4gICAgICAgICRpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVNdWx0aUlucHV0XCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIC8vRVNDXG4gICAgICAgICRpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNhbmNlbE11bHRpSW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgaWYgKHByb3BzLm9uSW5wdXQpIHtcbiAgICAgICAgcHJvcHMub25JbnB1dCh7XG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgdmFsdWU6IGUuc3JjRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAkZWxlbWVudDogJGlucHV0Q29udGFpbmVyLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBjcmVhdGVDb250ZXh0TWVudSh7XG4gICAgY29uZmlnLFxuICAgIHRhcmdldCxcbiAgICAkY2FwaWJhcmFFbGVtID0gbnVsbCxcbiAgICBldnQgPSBudWxsLFxuICAgIGRhdGUgPSBudWxsLFxuICAgIGl0ZW0gPSBudWxsLFxuICAgIHNlbGVjdGVkID0gW10sXG4gICAgdGFiU2VsZWN0ZWQgPSBudWxsLFxuICAgIGxlZnQgPSBudWxsLFxuICAgIHRvcCA9IG51bGwsXG4gICAgbmFtZSA9IFwiXCIsXG4gIH0pIHtcbiAgICBpZiAoXG4gICAgICBjb25maWcudGltZWxpbmUuY29udGV4dE1lbnUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51Lm9wdGlvbnMgPT0gdW5kZWZpbmVkXG4gICAgKVxuICAgICAgcmV0dXJuIHsgZWxlbTogbnVsbCwgaXNWaXNpYmxlOiBmYWxzZSB9O1xuXG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgbGV0IHN0eWxlID0gXCJcIjtcbiAgICBsZXQgc3RySHRtbCA9IFwiXCI7XG4gICAgbGV0IGxlZnRQb3NpdGlvbiA9IG51bGw7XG4gICAgbGV0IHRvcFBvc2l0aW9uID0gbnVsbDtcbiAgICBsZXQgaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICBsZXQgYm91bmRSZWN0Q2FwaWJhcmEgPSBudWxsO1xuICAgIGxldCBnYXAgPSAxNTsgLy9weFxuXG4gICAgaWYgKCRjYXBpYmFyYUVsZW0pIHtcbiAgICAgIGJvdW5kUmVjdENhcGliYXJhID0gJGNhcGliYXJhRWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBpZiAoZXZ0ICYmIGJvdW5kUmVjdENhcGliYXJhKSB7XG4gICAgICBsZWZ0ID0gZXZ0LmNsaWVudFg7XG4gICAgICB0b3AgPSBldnQuY2xpZW50WSAtIGJvdW5kUmVjdENhcGliYXJhLnRvcDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCkge1xuICAgICAgbGVmdFBvc2l0aW9uID0gbGVmdDtcbiAgICB9XG5cbiAgICBpZiAodG9wKSB7XG4gICAgICB0b3BQb3NpdGlvbiA9IHRvcDtcbiAgICB9XG5cbiAgICBpZiAoKGxlZnRQb3NpdGlvbiAhPT0gbnVsbCkgJiAodG9wUG9zaXRpb24gIT09IG51bGwpKSB7XG4gICAgICBpZiAoYm91bmRSZWN0Q2FwaWJhcmEpIHtcbiAgICAgICAgbGV0IHRyYW5zZm9ybVN0eWxlID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRvcFBvc2l0aW9uID4gKGJvdW5kUmVjdENhcGliYXJhLmhlaWdodCAqIDIpIC8gNiAmJlxuICAgICAgICAgIHRvcFBvc2l0aW9uIDw9IChib3VuZFJlY3RDYXBpYmFyYS5oZWlnaHQgKiA0KSAvIDZcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJhbnNmb3JtU3R5bGUgKz0gYHRyYW5zbGF0ZVkoLTUwJSlgO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3BQb3NpdGlvbiA+IChib3VuZFJlY3RDYXBpYmFyYS5oZWlnaHQgKiA0KSAvIDYpIHtcbiAgICAgICAgICB0cmFuc2Zvcm1TdHlsZSArPSBgdHJhbnNsYXRlWSgtMTAwJSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlZnRQb3NpdGlvbiA+IChib3VuZFJlY3RDYXBpYmFyYS53aWR0aCAqIDQpIC8gNikge1xuICAgICAgICAgIHRyYW5zZm9ybVN0eWxlICs9IGB0cmFuc2xhdGVYKC0xMDAlKWA7XG4gICAgICAgICAgbGVmdFBvc2l0aW9uIC09IGdhcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0UG9zaXRpb24gKz0gZ2FwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFuc2Zvcm1TdHlsZSAhPSBcIlwiKSB7XG4gICAgICAgICAgc3R5bGUgKz0gYCB0cmFuc2Zvcm06ICR7dHJhbnNmb3JtU3R5bGV9O2A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3R5bGUgKz0gYHRvcDogJHt0b3BQb3NpdGlvbn1weDsgbGVmdDogJHtsZWZ0UG9zaXRpb259cHg7YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3NOYW1lICs9IFwiY20taGlkZVwiO1xuICAgICAgaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RySHRtbCArPSBgIDxkaXYgY2xhc3M9XCJjYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAke2NsYXNzTmFtZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1jb250ZXh0LW1lbnVcIiBzdHlsZT1cIiR7c3R5bGV9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0ICRjb250ZXh0TWVudUNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RySHRtbCk7XG4gICAgbGV0ICRjb250ZXh0TWVudSA9ICRjb250ZXh0TWVudUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmNhcC1jb250ZXh0LW1lbnVcIik7XG4gICAgbGV0IGhhc1NvbWVvcHRpb24gPSBmYWxzZTtcblxuICAgIGNvbmZpZy50aW1lbGluZS5jb250ZXh0TWVudS5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5zaG93SWYpIHtcbiAgICAgICAgbGV0IHNob3cgPSBvcHRpb24uc2hvd0lmKHsgaXRlbSwgZGF0ZSwgc2VsZWN0ZWQsIG5hbWUsIHRhYlNlbGVjdGVkIH0pO1xuICAgICAgICBpZiAoIXNob3cpIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzRW5hYmxlZCA9IHRydWU7XG4gICAgICBsZXQgaXNDbGlja2VhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChvcHRpb24uZW5hYmxlSWYpIHtcbiAgICAgICAgaXNFbmFibGVkID0gb3B0aW9uLmVuYWJsZUlmKHtcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBvcHRpb25DbGFzc05hbWUgPSBcIlwiO1xuICAgICAgbGV0IHN0ckljb24gPSBcIlwiO1xuICAgICAgbGV0IGxhYmVsID0gXCJcIjtcblxuICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgb3B0aW9uQ2xhc3NOYW1lICs9IFwiaXMtZGlzYWJsZWQgXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb24uaXNEaXZpZGVyKSB7XG4gICAgICAgIGlzQ2xpY2tlYWJsZSA9IGZhbHNlO1xuICAgICAgICBvcHRpb25DbGFzc05hbWUgKz0gXCJpcy1kaXZpZGVyIFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLmxhYmVsKSB7XG4gICAgICAgIGxhYmVsID0gYDxzcGFuPiR7b3B0aW9uLmxhYmVsfTwvc3Bhbj5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLmljb24pIHtcbiAgICAgICAgc3RySWNvbiA9IGA8ZGl2IGNsYXNzPVwiY2FwLWNvbnRleHQtbWVudV9pdGVtX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCIke29wdGlvbi5pY29ufVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3B0aW9uU3RySHRtbCA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1jb250ZXh0LW1lbnVfaXRlbSAke29wdGlvbkNsYXNzTmFtZX1cIj5cbiAgICAgICAgICAke3N0ckljb259XG4gICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgbGV0ICRvcHRpb24gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKG9wdGlvblN0ckh0bWwpO1xuXG4gICAgICBpZiAoaXNFbmFibGVkICYmIGlzQ2xpY2tlYWJsZSkge1xuICAgICAgICAkb3B0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZ0Q2xpY2spID0+XG4gICAgICAgICAgb3B0aW9uLm9uQ2xpY2soe1xuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZXZ0OiBldnRDbGljayxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dENsaWNrKSA9PiB7XG4gICAgICAgICAgZXZ0Q2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldnRDbGljay5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgICRjb250ZXh0TWVudS5hcHBlbmQoJG9wdGlvbik7XG4gICAgICBoYXNTb21lb3B0aW9uID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtOiAkY29udGV4dE1lbnVDb250YWluZXIsXG4gICAgICBpc1Zpc2libGUsXG4gICAgfTtcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQVFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQVFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQVFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQVFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFIQTtBQVdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBSUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTtBQStDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3Q0E7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBSEE7QUFZQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFIQTtBQWFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBVUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFXQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBVUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWxFQTtBQUNBO0FBb0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBU0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUF0akpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/util/tableElements.js\n");
|
|
258
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/dateUtils */ \"./src/util/dateUtils.js\");\n/* harmony import */ var _util_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/icons */ \"./src/util/icons.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Crea elemento Table\n * Contendrá los elementos que apareceran dentro de la tabla de planilla\n * Se Usa para :\n * - Agregar background con patron estilo tabla\n * - Agregar dayMouseOver, div que indica posicion de mouse\n * - Agregar DetailDay, para detalles de datos en tabla\n * - Agregar SelectedContainer, para dias seleccionados\n * - Agregar FloatBoxContainer, para visualizacion de datos en tabla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom creado\n */\n createAgTable(config) {\n let e = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"capibara\"\n });\n\n if (config.timeline.dark) {\n e.classList.add(\"dark-theme\");\n }\n\n if (config.timeline.header.extend.isShow) {\n e.classList.add(\"header-extended\");\n }\n\n if (config.timeline && config.timeline.forceMobile === true) {\n e.classList.add(\"force-mobile\");\n }\n\n return e;\n },\n\n /**\n * Recrea Background, que es el fondo grid, como tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento relacionado, donde se cre el background\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawBackground(config, $elem) {\n return this.createBackground(config, $elem);\n },\n\n /**\n * Crea y posiciona fondo de tabla\n * Este fondo contiene un patron de CSS que le da la apariencia de tabla\n * por lo cual se debe reposicionar segun la fecha de inicio, para hacer\n * calzar los fines de semana\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem = null] - Elemento background, si es null, lo crea\n * @return {Object} elemento Dom Background\n */\n createBackground(config, $elem = null) {\n let {\n height,\n width,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let start = new Date(config.timeline.start);\n let end = new Date(config.timeline.end);\n end.setTime(end.getTime() + _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].dayInMilliseconds); // add 24 hours\n\n let dCorrected = new Date(start.valueOf() + start.getTimezoneOffset() * 60000);\n let weekDay = dCorrected.getDay();\n let diffWeekDays = (weekDay - 1) * dayWidth * -1;\n $elem = $elem || _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"background-grid\"\n });\n $elem.style[\"background-position\"] = diffWeekDays + \"px 0, 0 0, \" + diffWeekDays + \"px 0\";\n $elem.style.width = width + \"px\";\n $elem.style.height = height + 1 + \"px\";\n return $elem;\n },\n\n /**\n * Crea Plot Container Vertical\n * Los plots son elementos que agregan secciones de fondo en la planilla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n createPlotVerticalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-vertical-container\"\n });\n return this.redrawPlotVerticalContainer(config, $elem);\n },\n\n createPlotHorizontalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-horizontal-container\"\n });\n return this.redrawPlotHorizontalContainer(config, $elem);\n },\n\n /**\n * Recrea plotVerticalContainer, usando elemento existente\n * usa un elemento existente para usar la funcion para redibujar el elemento\n *\n * Los Plots se insertan como divs, con posicion especificada,\n * con ancho de dia\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea plotVerticalContainer\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n redrawPlotVerticalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.vertical) {\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.vertical.forEach(p => {\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, p.date));\n let left = diffDays * dayWidth;\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-vertical\", p.className || \"\"],\n style: {\n \"margin-left\": left + \"px\",\n height: height + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n redrawPlotHorizontalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.horizontal) {\n let {\n width,\n itemHeight\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.horizontal.forEach(p => {\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, p.idNode, p.typeNode);\n let topPosition = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item, \"parent\");\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-horizontal\", p.className || \"\"],\n style: {\n \"margin-top\": topPosition * itemHeight + \"px\",\n width: width + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Izquierdo\n * Se usa para :\n * - titulos relacionados con los datos del sidebar izquierdo\n * - titulos para inputs de header, absolute a la derecha\n * - boton para mostrar/ocultar sidebar izquierdo\n * - promedios\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner\n */\n createCorner(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"corner\"\n });\n return this.redrawCorner($elem, config, tab);\n },\n\n redrawCorner($elem, config, tab = null) {\n let labelsInitialCorner = config.timeline.nav.left.initial.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsExtendCorner = config.timeline.nav.left.extend.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsHeaderExtend = config.timeline.header.extend.data.map(d => {\n if (d.isHidden) return \"\";\n let avg = \"\";\n let tooltip = \"\";\n let className = \"\";\n let isAccent = d.isAccent;\n\n if (d.average) {\n avg = ` <span class=\"average \"> ( <span> <span class=\"symbol\">x̄</span> ${d.average} </span>) </span> `;\n tooltip = `cap-tooltip=\"Promedio ${d.label} : ${d.average} ${d.suffix || \"\"}\"`;\n }\n\n if (d.color) {\n if (isAccent) {\n className = d.color ? \"c-\" + d.color + \"--background\" : \"\";\n } else {\n className = d.color ? \"c-\" + d.color + \"--text \" : \"\";\n }\n }\n\n return `<div class=\"input-title-container ${isAccent ? \"input-title--accent\" : \"\"} ${d.isPersistent ? \"persistent\" : \"\"}\">\n <span ${tooltip} class=\"input-title ${className}\">\n ${avg}\n ${d.label}\n </span>\n\n </div>`;\n }).join(\"\");\n let toggleSidebarBtnString = `\n <button toggle-sidebar class=\"cap-btn-icon cap-btn-icon-raised cap-btn-toggle-sidebar \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronRight}\n </button> `;\n\n if (config.timeline.nav.left.hideToggleSidebarButton) {\n toggleSidebarBtnString = \"\";\n }\n\n let template = `<div>\n\n ${toggleSidebarBtnString}\n <div class=\"corner-title\">\n <span class=\"bottom-text\">\n ${config.timeline.corner.left.label}\n </span>\n </div>\n\n <div class=\"initial-corner\">\n <div class=\"initial-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.initial.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsInitialCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"extend-corner\">\n <div class=\"ex-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.extend.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsExtendCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"cap-btn-nav-corner\">\n <div class=\"input-titles\">\n ${labelsHeaderExtend}\n </div>\n </div>\n\n <div class=\"progress-bar progress-bar-left hide-progress\"></div>\n\n </div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(template);\n $elem.innerHTML = \"\";\n $elem.append(r);\n let toggleSidebar = $elem.querySelector(\"[toggle-sidebar]\");\n\n if (toggleSidebar) {\n toggleSidebar.addEventListener(\"click\", e => {\n r.dispatchEvent(new CustomEvent(\"toggleSidebar\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Derecho\n * Se usa para :\n * - titulos relacionados con los datos del sidebar Derecho\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom corner\n */\n createCornerRight(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"corner\", \"right\"]\n });\n return this.redrawCornerRight($elem, config, tab);\n },\n\n redrawCornerRight($el, config, tab = null) {\n let label = \"\";\n\n if (config.timeline.corner.right.label) {\n ` <span>\n ${config.timeline.corner.right.label}\n </span>`;\n }\n\n let str = `\n <div class=\"corner-title\">\n ${label}\n <div class=\"btn-container\"></div>\n </div>\n <div class=\"progress-bar progress-bar-right hide-progress\"></div>\n `;\n $el.innerHTML = str.trim();\n let $btnContainer = $el.querySelector(\".btn-container\");\n\n if (config.timeline.corner.right.buttons) {\n config.timeline.corner.right.buttons.forEach(btn => {\n let isEnabled = btn.getIsEnabled ? btn.getIsEnabled() : true;\n\n if (isEnabled) {\n let $btn = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"corner-btn cap-btn-raised\">\n ${btn.label || \"\"}\n </button> `);\n\n if (btn.onClick) {\n $btn.addEventListener(\"click\", btn.onClick);\n }\n\n $btnContainer.appendChild($btn);\n }\n });\n }\n\n if (config.timeline.corner.right.inputs) {\n config.timeline.corner.right.inputs.forEach(input => {\n let $input = this.createCornerRightInput({\n inputConfig: input\n });\n $btnContainer.appendChild($btn);\n });\n }\n\n return $el;\n },\n\n createCornerRightInput({\n inputConfig,\n dataDay = null,\n daySelected = null\n }) {\n let r = null;\n\n switch (inputConfig.type) {\n case \"autocomplete-crud\":\n r = this.createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n });\n break;\n }\n\n return r;\n },\n\n createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n }) {\n let elem = \"test\";\n return elem;\n },\n\n /**\n * Crea Header Top\n * Se usa para :\n * - Manejo de tabs\n * - Botones de navegación y selección de fecha\n * - Boton toggle Dark mode\n * - Boton toggle Header extended\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeaderTop(config, tabSelected = null) {\n return this.redrawHeaderTop(config, tabSelected, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\"));\n },\n\n redrawHeaderTop(config, tabSelected = null, $elem) {\n let str = `\n <div class=\"header-top\">`;\n\n if (config.timeline.tabs) {\n let showTabs = true;\n\n if (config.timeline.tabs.filter(t => !t.isHidden).length == 0) {\n showTabs = false;\n }\n\n if (showTabs) {\n const forceMobile = config.timeline && config.timeline.forceMobile === true;\n const tabSelectClasses = forceMobile ? \"tab-select-container c-d-mobile-flex\" : \"tab-select-container c-d-desktop-none c-d-mobile-flex\";\n const tabsContainerClasses = forceMobile ? \"tabs-container c-d-mobile-none\" : \"tabs-container c-d-desktop-flex c-d-mobile-none\";\n str += ` <div class=\"${tabSelectClasses}\">\n <select class=\"tabs-select\" >`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <option ${tab == tabSelected ? 'selected=\"selected\"' : \"\"} value=\"${tab.id}\"> ${tab.label} </option>`;\n }\n });\n str += `</select> </div>`;\n str += ` <div class=\"${tabsContainerClasses}\">`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <button\n class=\"tab ${tab.disabled ? \"disabled\" : \"\"} ${tab == tabSelected ? \"active\" : \"\"} ${tab.color}\"\n color=\"${tab.color}\"\n input-key=\"${tab.id}\"\n ${tab.tooltip ? 'cap-tooltip=\"' + tab.tooltip + '\"' : \"\"} >\n <span>${tab.label}</span>\n ${tab.icon || \"\"}\n </button>\n `;\n }\n });\n str += `</div>`;\n }\n }\n\n if (tabSelected) {\n if (tabSelected.legends) {\n str += ` \n <button toggle-legends class=\"cap-btn-icon cap-btn-icon-raised \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].toggleLegends}\n </button> \n\n <div class=\"legends-container force-mobile-style hide\"> `;\n tabSelected.legends.forEach(legend => {\n let colorClass = \"\";\n let colorBg = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(legend.color)) {\n colorBg = \"background:\" + legend.color;\n } else {\n colorClass = legend.color ? legend.color + \"--background\" : \"\";\n }\n\n str += ` <div\n class=\"legend ${legend.active ? \"active\" : \"\"}\"\n input-key=\"${legend.key}\"\n ${legend.tooltip ? `cap-tooltip=\"${legend.tooltip}\"` : \"\"} >\n <div class=\"icon-legend ${colorClass} ${legend.shape}\" style=\"${colorBg}\"></div>\n <span>${legend.label}</span>\n </div>`;\n });\n str += `</div>`;\n }\n }\n\n str += `\n\n <div class=\"spacer\"></div>\n\n\n\n <button cap-btn-prev class=\"cap-btn-icon cap-btn-icon-raised c-d-mobile-none\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowLeft}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon} \n </button>\n\n\n <button cap-btn-calendar class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].calendar}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <button cap-btn-next class=\"cap-btn-icon cap-btn-icon-raised c-d-mobile-none\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowRight}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <div class=\"spacer\"></div>\n\n <button toggle-dark class=\"cap-btn-icon cap-btn-header c-d-mobile-none ${config.timeline.withDarkToggle == false ? \"hide\" : \"\"}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].dark}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].light}\n </button>`;\n\n if (config.timeline.header.extend.enabled !== false) {\n str += `<button toggle-header class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n str += ` <div class=\"button-right-container\"></div>\n </div>`;\n /*\n `\n <button toggle-sidebar-right class=\"cap-btn-icon cap-btn-icon-raised\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\" />\n </svg>\n </span>\n </button>\n </div>\n `;\n */\n\n let $r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.replaceWith($r);\n\n if (config.timeline.header.rightButtons) {\n let $buttonContainer = $r.querySelector(\".button-right-container\");\n config.timeline.header.rightButtons.forEach(button => {\n const customClass = button.customClass || \"\";\n let hasBadge = false;\n\n if (button.hasBadge) {\n hasBadge = button.hasBadge();\n }\n\n let str = `<button class=\"cap-btn-icon cap-btn-icon-raised ${hasBadge ? \"cap-btn-has-badge\" : \"\"} ${customClass}\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"${button.icon}\" />\n </svg>\n </span>\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $button.addEventListener(\"click\", evt => button.onClick({\n evt\n }));\n $buttonContainer.append($button);\n });\n }\n\n let $toggleDark = $r.querySelector(\"[toggle-dark]\");\n\n if ($toggleDark) {\n $toggleDark.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleDark\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n let $btnCalendar = $r.querySelector(\"[cap-btn-calendar]\");\n\n if ($btnCalendar) {\n $btnCalendar.addEventListener(\"click\", e => {\n let x = e.x;\n let y = e.y;\n $r.dispatchEvent(new CustomEvent(\"clickCalendarIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n x,\n y\n }\n }));\n });\n }\n\n let $btnToggleHeader = $r.querySelector(\"[toggle-header]\");\n\n if ($btnToggleHeader) {\n $btnToggleHeader.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleHeader\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n /*\n $r.querySelector(\"[toggle-sidebar-right]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleSidebarRight\", {\n bubbles: true,\n cancelable: false,\n }));\n });\n */\n\n\n $r.querySelector(\"[cap-btn-prev]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerPrev\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-calendar]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerCalendar\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-next]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerNext\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n let $toggleLegendsBtn = $r.querySelector(\"[toggle-legends]\");\n\n if ($toggleLegendsBtn) {\n $toggleLegendsBtn.addEventListener(\"click\", e => {\n let $legendContainer = $r.querySelector(\".legends-container\");\n\n if ($legendContainer) {\n $legendContainer.classList.toggle(\"hide\");\n }\n });\n }\n\n $r.querySelectorAll(\".legend\").forEach($legend => {\n $legend.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let legendSelected = tabSelected.legends.find(tab => tab.key === key);\n\n if (legendSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectLegendHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n legend: legendSelected,\n $legend\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tab:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tabs-select:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"change\", e => {\n let key = parseFloat(e.currentTarget.value);\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n return $r;\n },\n\n /**\n * Crea Header\n * Se usa para :\n * - Mostrar fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeader(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"header\");\n return this.redrawHeader(config, $elem);\n },\n\n /**\n * Recrea Header, usado para redibujar\n * utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea Header\n * @return {Object} Elemento Dom\n */\n redrawHeader(config, $elem) {\n let datesTree = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateTreeRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container\"> `;\n Object.keys(datesTree).forEach(keyY => {\n let year = datesTree[keyY];\n str += `<div class=\"agno-calendario\">\n <span class=\"agno hide\">${keyY}</span>\n <div class=\"meses\">`;\n Object.keys(year).forEach(keyM => {\n let month = datesTree[keyY][keyM];\n str += ` <div class=\"mes-calendario\">\n <div class=\"mes ${Object.keys(month).length < 4 ? \"mes-reduced mes-reduced-\" + Object.keys(month).length : \"\"}\">\n <div class=\"mes-label\">\n ${_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMonthByPosition(keyM)} ${keyY}\n </div>\n </div>\n <div class=\"dias\">`;\n Object.keys(month).forEach(keyD => {\n let day = datesTree[keyY][keyM][keyD];\n let isWeekend = day.isWeekend;\n let isToday = day.isToday;\n let hasAlert = config.timeline.header.dateHasAlert ? config.timeline.header.dateHasAlert(day) : false;\n let date = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(day.date);\n str += `<div class=\"dia-calendario \n ${isToday ? \"today\" : \"\"}\n ${isWeekend ? \"weekend\" : \"\"}\n ${hasAlert ? \"has-alert\" : \"\"}\n ${config.timeline.dateSelectable ? \"is-clickeable\" : \"\"}\n ${config.timeline.dateWithContextMenu ? \"is-clickeable\" : \"\"}\n \" date=\"${date}\">${keyD}</div>`;\n });\n str += `</div></div>`;\n });\n str += `</div> </div>`;\n });\n str += `</div>`;\n $elem.innerHTML = \"\";\n $elem.append(_util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str));\n let $days = $elem.querySelectorAll(\".dia-calendario[date]\");\n $days.forEach($dia => {\n if (config.timeline.dateWithContextMenu) {\n $dia.addEventListener(\"contextmenu\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"contextMenuDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\"),\n clientX: evt.clientX,\n clientY: evt.clientY\n }\n }));\n });\n }\n\n if (config.timeline.dateSelectable) {\n $dia.addEventListener(\"click\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"clickDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\")\n }\n }));\n });\n }\n\n if (config.timeline.onMouseOverDate) {\n $dia.addEventListener(\"mouseover\", evt => {\n config.timeline.onMouseOverDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n\n if (config.timeline.onMouseOutDate) {\n $dia.addEventListener(\"mouseout\", evt => {\n config.timeline.onMouseOutDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n });\n return $elem;\n },\n\n /**\n * Crea Header extended\n * Se usa para :\n * -Mostrar inputs y datos para fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom headerExtended\n */\n createHeaderExtended(config) {\n if (config.timeline.header.extend.enabled == false) return null;\n let dates = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container-extended\">`;\n config.timeline.header.extend.data.forEach((d, d_index) => {\n if (d.isHidden) return \"\";\n let isPersistent = d.isPersistent;\n str += `<div class=\"input-list ${isPersistent ? \"persistent\" : \"\"}\">`;\n str += dates.map(date => {\n let value = \"\";\n let className = \"\";\n let isFuture = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isFuture(date);\n let isToday = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isToday(date);\n\n if (d.data) {\n let dataFounded = d.data.find(dataInput => {\n return _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(dataInput.date + \"T00:00:00\"), date);\n });\n\n if (dataFounded) {\n value = dataFounded.value || \"\";\n className += dataFounded.className + \" \" || false;\n }\n }\n\n if (d.editable === false || isFuture && d.editableFuture == false || isToday && d.editableToday == false) {\n return `<div>\n <span date=\"${_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(date)}\" \n index=\"${d_index}\" \n class=\" ${className} ${date.varName || \"\"} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" > \n ${value} \n </span>\n </div>`;\n }\n\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n return `<div class=\"dia-input\">\n <input \n date=\"${_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(date)}\" \n index=\"${d_index}\" \n class=\"header-input \n ${date.varName} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" \n type=\"number\"\n ${isDisabled ? \"disabled\" : \"\"} \n value=\"${value}\">\n </div>`;\n }).join(\"\");\n str += `</div>`;\n });\n str += `</div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n r.querySelectorAll(\"input.header-input\").forEach(input => {\n input.addEventListener(\"input\", e => {\n let date = e.currentTarget.getAttribute(\"date\");\n let index = e.currentTarget.getAttribute(\"index\");\n let value = e.currentTarget.value;\n let typeData = config.timeline.header.extend.data[index]; //refresh config value\n\n let data = typeData.data.find(d => _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(d.date + \"T00:00:00\"), new Date(date + \"T00:00:00\")));\n\n if (data) {\n data.value = value;\n } else {\n typeData.data.push({\n date: date,\n value: value\n });\n }\n\n r.dispatchEvent(new CustomEvent(\"changeInputHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n date: date,\n typeData: typeData,\n value: value\n }\n }));\n });\n });\n return r;\n },\n\n /**\n * Crear Sidebar Izquierdo\n * - Maneja items como arbol de 2 niveles (parent, children)\n * - El sidebar se divide en navList - InitialNav - extendedNav - BtnNav\n * - Se agrega itemDetail, para detalles de items\n *\n *\n * TODO: para evitar incrustar las ids en los inputs, se deben crear\n * los nodos uno por uno como elemento DOM, y agregarles los eventos directamente\n * ahora se hace seleccionando todos los inputs con querySelectorAll\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Sidebar Izquierdo\n */\n createNavLeft(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"left\"\n });\n return this.redrawNavLeft($elem, config, tab);\n },\n\n /**\n * Recrea Sidebar izquierdo, usado para redibujar\n * Utiliza $elem como elemento dom donde recrearlo\n *\n *\n * @param {Object} $elem - Elemento Dom donde crea el sidebar izquierdo\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom navLeft\n */\n redrawNavLeft($elem, config, tab = null) {\n let navList = \"\";\n let initialNavList = \"\";\n let exNavList = \"\";\n let btnNavList = \"\";\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n config.data.forEach(d => {\n if (d.isHidden) return;\n const hasBtn = !!d.onClickDetailButton;\n const isMobile = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile(config);\n const hasClickLabelToDetail = !!d.onClickDetailButton && !!d.clickLabelToDetail; // en mobile con clickLabelToDetail: no mostrar botón, el nombre es clickeable\n\n const showDetailBtn = hasBtn && !(isMobile && hasClickLabelToDetail);\n const detailBtnContent = showDetailBtn && isMobile ? d.iconDetailButton || _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].infoOutline : showDetailBtn ? d.labelDetailButton || \"\" : \"\";\n const detailBtn = showDetailBtn ? `<button class=\"detail-btn ${isMobile ? \"detail-btn-icon\" : \"\"}\" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" ${isMobile && d.labelDetailButton ? `title=\"${d.labelDetailButton.replace(/\"/g, \""\")}\"` : \"\"}>\n ${detailBtnContent}\n </button>` : \"\";\n navList += `\n <div class=\"nav-item\">\n\n\n <div class=\"nav-item-container parent\">`;\n\n if (d.children) {\n navList += `<button class=\"tree-icon ${d.isClosed ? \"\" : \"cap-rotate\"}\" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n navList += `\n <div class=\"item-title truncate full-width ${d.clickeable || hasClickLabelToDetail ? \"clickeable\" : \"\"} ${hasClickLabelToDetail ? \"click-label-to-detail\" : \"\"}\n ${d.navOver ? \"hoverable\" : \"\"} \" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n <div class=\"item-title-content\">\n ${d.label}\n </div>\n <div class=\"detail-btn-container\">\n ${detailBtn}\n </div>\n </div>\n </div>`;\n\n if (d.children) {\n navList += `\n <div class=\"children-items ${d.isClosed ? \"hide\" : \"\"} \" child-list=\"${d.id || -1}\">`;\n d.children.forEach(c => {\n if (c.isHidden) return;\n let lightColor = null;\n let lightClass = null;\n let lightSpan = \"\";\n let multiButtonsDetailTmpl = \"\";\n\n if (c.light) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(c.light)) {\n lightColor = c.light;\n } else {\n lightClass = c.light;\n }\n }\n\n if (c.light) {\n lightSpan = `<span \n class=\"light ${lightClass ? lightClass + \"-light\" : \"\"}\" \n style=\"${lightColor ? \"--light-color:\" + lightColor : \"\"}\">\n </span>`;\n }\n\n if (c.hasMultibuttons) {\n let iconFormatter = null;\n\n if (config.timeline.nav.left.initial.multibuttons && config.timeline.nav.left.initial.multibuttons.iconFormatter) {\n iconFormatter = config.timeline.nav.left.initial.multibuttons.iconFormatter;\n }\n\n let btnContent = iconFormatter ? iconFormatter({\n item: c,\n config\n }) : \"\";\n multiButtonsDetailTmpl = `<button class=\"multibuttons-btn\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\" \n ${isDisabled ? \"disabled\" : \"\"}>\n ${btnContent} \n </button>`;\n }\n\n navList += `\n <div class=\"child-nav-item\">\n <div class=\"nav-item-container\">\n `;\n /*\n <span class=\"nav-item-icon\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M19,15L13,21L11.58,19.58L15.17,16H4V4H6V14H15.17L11.58,10.42L13,9L19,15Z\" />\n </svg>\n </span>\n */\n\n navList += `\n ${lightSpan}\n ${multiButtonsDetailTmpl}\n <div \n class=\"item-title ${c.clickeable ? \"clickeable\" : \"\"} ${c.navOver ? \"hoverable\" : \"\"}\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\">\n\n <div class=\"truncate\">\n ${c.label}\n </div>\n </div>\n </div>\n </div>`;\n });\n navList += `\n </div>`;\n }\n\n navList += `</div>`; //initial\n\n initialNavList += `<div class=\"initial-nav-item parent\">`;\n\n if (d.withNav) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n initialNavList += `<div class=\"child-initial-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n });\n } //Ext\n\n\n exNavList += `<div class=\"ex-nav-item parent\">`;\n\n if (d.withExNav) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n exNavList += `<div class=\"child-ex-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value ? value.split(\":\") : [0, 0];\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n });\n } //buttons\n\n\n btnNavList += `<div class=\"cap-btn-nav-item parent\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (d.withBtnNav) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(d, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(d, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(d, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${d.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return; //buttons\n\n btnNavList += `<div class=\"cap-btn-child-nav-item parent ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (c.withNav !== false) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(c, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(c, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(c, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${c.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n });\n }\n });\n let itemDetail = ` <div class=\"detail-nav-item hide\">\n ${this.getDetailNavItemContent()}\n </div>`;\n let str = `<div class=\"nav-container\">\n ${itemDetail}\n <div class=\"nav-item-list\">\n ${navList}\n </div>\n <div class=\"initial-nav-list\">\n ${initialNavList}\n </div>\n <div class=\"extend-nav-list\">\n ${exNavList}\n </div>\n <div class=\"cap-btn-nav-list\">\n ${btnNavList}\n </div>\n </div>`;\n let navContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.innerHTML = \"\";\n $elem.append(navContainer); //detalle de nav-item\n\n $elem.querySelectorAll(\".item-title.hoverable\").forEach(i => {\n i.addEventListener(\"mouseover\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"overNavItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e,\n item: item,\n type: typeNode,\n pos: pos\n }\n }));\n });\n }); //oculta detalle de nav-item, al salir del nav-item-list\n\n $elem.querySelectorAll(\".nav-item-list\").forEach(i => {\n i.addEventListener(\"mouseleave\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }); //oculta detalle de nav-item-list, al salir de nav-item\n\n $elem.querySelectorAll(\".item-title:not(.hoverable)\").forEach(i => {\n i.addEventListener(\"mousemove\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n });\n $elem.querySelectorAll(\".item-title.clickeable\").forEach(i => {\n i.addEventListener(\"click\", e => {\n // si tiene clickLabelToDetail, ese handler se encarga (no disparar clickNavLeftItem)\n if (i.classList.contains(\"click-label-to-detail\")) return;\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let value = i.value;\n const $container = i.closest(\".nav-item-container\");\n const isGroup = $container && $container.classList.contains(\"parent\");\n const isItem = i.closest(\".child-nav-item\") !== null;\n const kind = isItem ? \"item\" : isGroup ? \"group\" : \"unknown\";\n console.log(\"[Capibara nav] clickNavLeftItem\", {\n kind,\n isGroup,\n isItem,\n itemId,\n typeNode,\n value: value != null ? value : \"(no value)\",\n target: e.target ? e.target.className : undefined\n });\n i.dispatchEvent(new CustomEvent(\"clickNavLeftItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n value: value,\n isGroup,\n isItem,\n kind\n }\n }));\n });\n });\n $elem.querySelectorAll(\".multibuttons-btn\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickMultiButtonsBtn\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n pos,\n button: i,\n event: e\n }\n }));\n });\n });\n $elem.querySelectorAll(\"input\").forEach(i => {\n i.addEventListener(\"change\", e => {\n let inputType = i.getAttribute(\"input-type\");\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let value = i.value;\n\n if (inputType == \"time\") {\n let hh_input = i.parentElement.querySelector(\"input.hh\").value;\n let mm_input = i.parentElement.querySelector(\"input.mm\").value;\n mm_input = mm_input < 10 ? \"0\" + parseFloat(mm_input) : mm_input;\n i.parentElement.querySelector(\"input.mm\").value = mm_input;\n value = hh_input + \":\" + mm_input;\n }\n\n i.dispatchEvent(new CustomEvent(\"saveNavLeftInput\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n item: item,\n type: typeNode,\n value: value,\n tabSelected: tab\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.cap-btn-shape\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickNavLeftButton\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n type: typeNode\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.detail-btn\").forEach(i => {\n i.addEventListener(\"click\", e => {\n e.stopPropagation(); // evitar que también dispare el click de item-title\n\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"parent\");\n\n if (item && item.onClickDetailButton) {\n item.onClickDetailButton({\n itemId: itemId,\n type: typeNode,\n item: item,\n event: e,\n button: i\n });\n }\n });\n }); // click en nombre/label ejecuta onClickDetailButton cuando clickLabelToDetail\n\n $elem.querySelectorAll(\".item-title.click-label-to-detail\").forEach(i => {\n i.addEventListener(\"click\", e => {\n if (e.target.closest(\".detail-btn\")) return; // el botón ya lo maneja\n\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"parent\");\n\n if (item && item.onClickDetailButton) {\n item.onClickDetailButton({\n itemId: itemId,\n type: typeNode,\n item: item,\n event: e,\n button: null\n });\n }\n });\n });\n $elem.querySelectorAll(\"button.tree-icon\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let dataConfig = config.data.find(d => d.id == itemId);\n let $navItem = e.currentTarget.closest(\".nav-item\");\n let $children = $navItem.querySelector(\".children-items\");\n let itemsToHide = e.currentTarget.closest(\"nav.left\").querySelectorAll(\"[child='\" + itemId + \"'], [child-list='\" + itemId + \"']\");\n\n if ($children) {\n if ($children.classList.contains(\"hide\")) {\n e.currentTarget.classList.add(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.remove(\"hide\"));\n dataConfig.isClosed = false;\n } else {\n e.currentTarget.classList.remove(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.add(\"hide\"));\n dataConfig.isClosed = true;\n }\n }\n\n i.dispatchEvent(new CustomEvent(\"clickNavLeftTreeIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode\n }\n })); //e.currentTarget.parent\n });\n });\n return $elem;\n },\n\n /**\n * Crea Html como String, para el detalle de items en el Sidebar Izquierdo\n *\n * @param {Object} [item={}] - Configuracion de item\n * @return {String} Html de ventana de detalle\n */\n getDetailNavItemContent(item = {}) {\n if (item.navOver == undefined) item.navOver = {};\n return `\n <div class=\"header-detail\">\n <div class=\"detail-title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"detail-subtitle\">\n ${item.navOver.subtitle || \"\"}\n </div>\n <div class=\"header-chip ${item.light ? item.light + \"-light\" : \"\"} ${item.navOver.chip ? \"\" : \"hide\"}\">\n ${item.navOver.chip || \"\"}\n </div>\n </div>\n\n <div class=\"detail-container\">\n ${item.navOver.content || \"\"}\n </div>`;\n },\n\n /**\n * Crea Sidebar Derecho\n * Usado principalmente para formulario de ingreso de datos para los dias\n * seleccionados\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @return {Object} {element, inputs}, element es el elemento Dom del sidebar,\n * inputs es un array de elementos Dom de cada input creado\n * (no son elementos html de tipo input)\n */\n createNavRight(config, tab = null) {\n var $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"right\"\n });\n return this.redrawNavRight(config, $elem, tab, null, [], null);\n },\n\n /**\n * Recrea Sidebar Derecho\n * Utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea el sidebar derecho\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @param {Object} dataDay - datos del dia seleccionando, para autorrelleno de formulario\n * @param {Object} daySelected - datos del dia seleccionado\n * @param {String} daySelected.date - fecha del dia seleccionado\n * @param {Object} daySelected.item - Item de Sidebar relacionado al dia seleccionado\n * @param {Object} daySelected.pos - posicion de dia seleccionado\n * @return {Object} Elemento Dom Sidebar Derecho\n */\n redrawNavRight(config, $elem, selected = null, tab = null, dataDay = null, daySelected = null) {\n let $navRight = $elem; //dom.createElement(\"nav\",{className:\"right\"});\n\n let $divContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"nav-input-container\"\n });\n let $inputs = [];\n let checkboxInputs = [];\n let inputsWithReload = [];\n let tabSelected = tab;\n selected = selected || [daySelected];\n\n if (tabSelected && tabSelected.inputs) {\n tabSelected.inputs.forEach(i => {\n if (i.disabled) return;\n\n if (i.showInputIf && !i.showInputIf(dataDay, daySelected, selected, tabSelected)) {\n return;\n }\n\n let $input = this.createInput(i, dataDay, daySelected, selected, tabSelected);\n\n if ($input) {\n $divContainer.appendChild($input);\n $inputs.push($input);\n\n if (i.type == \"checkbox\") {\n checkboxInputs.push($input);\n }\n\n if (i.reloadOnSelect != null) {\n inputsWithReload.push({\n $input,\n config: i\n });\n }\n }\n });\n } //manejo de eventos para inputs con showIf\n\n\n if (checkboxInputs) {\n checkboxInputs.forEach($c => {\n //obtiene key de checkbox\n let key = $c.getAttribute(\"input-key\");\n let props = tabSelected.inputs.find(i => {\n return i.key == key;\n });\n let isChecked = false;\n\n if (dataDay) {\n isChecked = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n } //obtiene inputs relacionados desde config para mostrar/ocultar\n\n\n let inputsToHide = tabSelected.inputs.filter(i => {\n return i.showIf && i.showIf == key;\n });\n let inputsToHideKeys = inputsToHide.map(i => i.key); //obtiene inputs del dom, filtrando con inputsToHide\n\n let $inputsHidden = $inputs.filter($i => {\n let inputKey = $i.getAttribute(\"input-key\");\n return inputsToHideKeys.indexOf(inputKey) > -1;\n }); //si hay inputs,\n\n if ($inputsHidden) {\n if (!isChecked) {\n $inputsHidden.forEach($i => {\n $i.classList.add(\"hide\");\n });\n }\n\n $c.addEventListener(\"input\", e => {\n $inputsHidden.forEach($i => {\n let fn = $c.querySelector(\"input[type='checkbox']\").checked ? \"remove\" : \"add\";\n $i.classList[fn](\"hide\");\n });\n });\n }\n });\n }\n\n let saveCancelBtns = this.createNavRightbuttons(config);\n $divContainer.appendChild(saveCancelBtns);\n $navRight.innerHTML = \"\";\n $navRight.appendChild($divContainer);\n return {\n element: $navRight,\n inputs: $inputs,\n inputsWithReload,\n saveCancelBtns\n };\n },\n\n /**\n * Crea Corner inferior izquierdo, como titulo para footer\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createCornerFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = \"\";\n\n if (config.timeline.footer) {\n str += `<div class=\"corner-footer\">\n <div class=\"corner-title\">\n <span>\n ${config.timeline.footer.label}\n </span>\n </div>\n </div>`;\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para mobile (debajo de la tabla, redimensiona la planilla)\n * Solo visible en mobile cuando hay selección.\n * Config: timeline.mobileFooter.cancelLabel, timeline.mobileFooter.cancelShowWhen,\n * timeline.mobileFooter.buttons\n * cancelShowWhen: \"select\"|\"detail\"|\"always\" - cuándo mostrar cancel (default: \"select\")\n * buttons: [{ id, label, icon?, customClass?, showWhen?, disabledWhenNoSelection?, onClick }]\n * showWhen: \"select\"|\"detail\"|\"always\" - select=checkbox activo, detail=checkbox inactivo (default: \"always\")\n * disabledWhenNoSelection: true - desactiva el botón en modo select sin días seleccionados\n * onClick({ evt, selected }) - selected: array de { index, date, item, pos } con días seleccionados\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom mobile-footer\n */\n createMobileFooter(config) {\n const mobileFooterConfig = config.timeline.mobileFooter || {};\n const cancelLabel = mobileFooterConfig.cancelLabel || \"Cancelar\";\n const cancelShowWhen = mobileFooterConfig.cancelShowWhen || \"select\";\n const buttons = Array.isArray(mobileFooterConfig.buttons) ? mobileFooterConfig.buttons : [];\n const mobileSelectActive = config.timeline.mobileSelectable === true;\n const mobileSelectLabel = mobileSelectActive ? \"Desactivar selección\" : \"Activar selección de días\";\n const mobileSelectIcon = _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCheckboxIcon ? _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCheckboxIcon(mobileSelectActive) : mobileSelectActive ? _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].checkboxChecked : _util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].checkboxUnchecked;\n const forceMobile = config.timeline && config.timeline.forceMobile === true;\n const footerClasses = forceMobile ? \"mobile-footer c-d-mobile-flex\" : \"mobile-footer c-d-mobile-flex c-d-desktop-none\";\n let str = `\n <div class=\"${footerClasses}\">\n <div class=\"mobile-footer-content\">`;\n\n if (config.timeline.selectableDesktop !== false) {\n const countHidden = !mobileSelectActive;\n str += `\n <button type=\"button\" id=\"cap-btn-mobile-select\" toggle-mobile-select\n class=\"cap-btn-icon cap-btn-icon-raised mobile-footer-select-toggle ${mobileSelectActive ? \"active\" : \"\"}\"\n role=\"switch\" aria-checked=\"${mobileSelectActive}\" aria-label=\"${mobileSelectLabel}\"\n cap-tooltip=\"${mobileSelectLabel}\">${mobileSelectIcon}<span class=\"mobile-footer-select-label\">\n Editar Días\n </span>\n <span class=\"mobile-footer-select-count\" ${countHidden ? 'style=\"display:none\"' : ''}>0 d</span>\n </button>`;\n }\n\n str += `\n <div class=\"mobile-footer-buttons\">\n <button type=\"button\" class=\"cap-btn-outline mobile-footer-cancel mobile-footer-select-toggle\" data-show-when=\"${cancelShowWhen}\">${cancelLabel}</button>`;\n buttons.forEach((btn, index) => {\n const customClass = btn.customClass || \"\";\n const btnClass = btn.icon ? \"cap-btn-icon cap-btn-icon-raised\" : \"cap-btn-outline\";\n const showWhen = btn.showWhen || \"always\";\n const disabledWhenNoSelection = btn.disabledWhenNoSelection === true;\n const content = btn.icon ? `<span><svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${btn.icon}\"/></svg></span>` : btn.label || \"\";\n str += `<button type=\"button\" class=\"${btnClass} mobile-footer-btn mobile-footer-select-toggle ${customClass}\" data-mobile-btn-idx=\"${index}\" data-mobile-btn=\"${btn.id || \"\"}\" data-show-when=\"${showWhen}\" data-disabled-when-no-selection=\"${disabledWhenNoSelection}\">${content}</button>`;\n });\n str += `\n </div>\n </div>\n </div>`;\n const $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n const $toggleMobileSelect = $elem.querySelector(\"[toggle-mobile-select]\");\n\n if ($toggleMobileSelect) {\n $toggleMobileSelect.addEventListener(\"click\", e => {\n $elem.dispatchEvent(new CustomEvent(\"toggleMobileSelect\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = `\n <footer>\n <div class=\"footer-container\">\n `;\n config.timeline.footer.data.forEach(d => {\n str += `\n <div class=\"footer-item\">${d.value}</div>\n `;\n });\n str += `\n </div>\n </footer>\n `;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object[]} selected - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom Corner Footer\n */\n createSelectBoard(config, selected) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"select-container\"\n });\n return this.redrawSelectBoard($elem, selected);\n },\n\n /**\n * Crea linea vertical para fecha Actual\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createTodayLine(config) {\n return this.redrawTodayLine(config, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n }));\n },\n\n /**\n * Recrea linea vertical para fecha Actual\n * si el elemento $elem no es enviado, se crea un nuevo elemento\n *\n * Si el dia actual no esta dentro del rango de fechas del config,\n * deshabilita la linea con la clase css .disable-line\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem=null] - Elemento Dom donde recrea la linea, si es null, la crea\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawTodayLine(config, $elem = null) {\n let endTime = new Date(config.timeline.end).getTime();\n let todayTime = new Date().getTime();\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n if ($elem == null) $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n });\n\n if (endTime < todayTime) {\n $elem.classList.add(\"disable-line\");\n } else {\n $elem.classList.remove(\"disable-line\");\n }\n\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(new Date())));\n let diff = diffDays * dayWidth;\n diff += dayWidth / 2 - 2; // para centrar linea\n\n Object.assign($elem.style, {\n \"margin-left\": diff + \"px\",\n height: height + \"px\"\n });\n return $elem;\n },\n\n /**\n * Crea elemento FloatBox, que contiene los datos que se muestra en la tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n createFloatBox(config, tab) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"float-box-container\"\n });\n return this.redrawFloatBox(config, tab, $container);\n },\n\n /**\n * Recrea elemento FloatBox, que contiene los datos que se muestra en la tabla\n * Se usa principalmente para mostrar datos en la tabla de la planilla\n * los muestra de manera flotante, calculando el Top y el Left segun la poscion\n *\n * Se consideran los elementos padres ocultos, para ocultar los datos\n *\n * Se insertan los elementos FloatBox, como elemento con datos de un item y dia especifico\n *\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawFloatBox(config, tab, $container) {\n $container.innerHTML = \"\"; //let tabSelected = tab || null;\n\n config.data.forEach(dataParent => {\n if (dataParent.isHidden) return;\n (dataParent.data || []).forEach(data => {\n this.createFloatBoxItem({\n container: $container,\n data,\n item: dataParent,\n isClosed: dataParent.isClosed,\n tab,\n config,\n typeNode: \"parent\"\n });\n });\n dataParent.children.forEach(dataChild => {\n if (dataChild.isHidden) return;\n dataChild.data.forEach(data => {\n this.createFloatBoxItem({\n container: $container,\n data,\n item: dataChild,\n isClosed: dataParent.isClosed,\n tab,\n config,\n typeNode: \"child\"\n });\n });\n });\n });\n return $container;\n },\n\n createFloatBoxItem({\n container,\n data,\n item,\n isClosed,\n tab,\n config,\n typeNode = \"child\"\n }) {\n // Verificar si hay mensaje\n let msg = null;\n\n if (tab.floatBox && tab.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data, tab.floatBox.messagePath);\n }\n\n const hasMessage = msg || data.message && data.message.value; // Verificar si hay errores\n\n const hasErrors = data.errors && data.errors.length > 0; // Verificar si hay contenido visible en floatBox\n\n let hasVisibleContent = false;\n\n if (hasMessage || hasErrors) {\n hasVisibleContent = true;\n } else if (data.values && tab && tab.floatBox) {\n // Verificar si hay contenido visible en nums, dots, plots, icons\n if (tab.floatBox.nums) {\n hasVisibleContent = tab.floatBox.nums.some(n => {\n let value = null;\n\n if (n.varName) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName);\n if (value === null || value === undefined) return false;\n }\n\n let showIf = true;\n let hideIf = false;\n\n if (n.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varShow)); // Si no hay varName pero hay varShow, considerar como contenido visible si se cumple la condición\n\n if (!n.varName) {\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n return showIf && !hideIf;\n }\n }\n\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n if (n.hidden === true) {\n hideIf = true;\n }\n\n return value !== null && showIf && !hideIf;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.dots) {\n hasVisibleContent = tab.floatBox.dots.some(dot => {\n return _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName) !== null;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.plots) {\n hasVisibleContent = tab.floatBox.plots.some(n => {\n return _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName) !== null;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.icons) {\n hasVisibleContent = tab.floatBox.icons.some(iconConfig => {\n if (iconConfig.varName) {\n return _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.varName) !== null;\n }\n\n return iconConfig.icon !== null;\n });\n }\n\n if (!hasVisibleContent && tab.floatBox.rowDots) {\n hasVisibleContent = tab.floatBox.rowDots.some(row => {\n return Array.isArray(row) && row.some(dot => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName);\n if (value === null || value === undefined) return false;\n let showIf = true;\n let hideIf = false;\n\n if (dot.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varShow));\n }\n\n if (dot.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varHide));\n }\n\n return showIf && !hideIf;\n });\n });\n }\n } // Si no hay contenido visible, no crear el floatBox\n\n\n if (!hasVisibleContent) {\n return null;\n } //children Data\n\n\n let position = this.getPositionFloatBox(config, data, item, typeNode);\n let className = \"\";\n\n if (data.errors && data.errors.length > 0) {\n className += \"has-errors \";\n\n if (data.errors[0]) {\n className += data.errors[0].classNameIcon + \" \";\n }\n }\n\n if (isClosed) {\n className += \"hide \";\n }\n\n if (hasMessage) {\n className += \"has-message \";\n }\n\n let strMsg = \"\";\n\n if (hasMessage) {\n let viewBox = \"0 0 24 24\"; //email outline icon\n\n let icon = \"M22 6C22 4.9 21.1 4 20 4H4C2.9 4 2 4.9 2 6V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V6M20 6L12 11L4 6H20M20 18H4V8L12 13L20 8V18Z\";\n strMsg = `\n <div class=\"icon-message\">\n <svg viewBox=\"${viewBox}\">\n <path d=\"${icon}\" />\n </svg>\n </div>\n `;\n }\n\n let str = `\n <div class=\"float-box ${className} \"\n style=\"${position ? position : \"\"}\"\n item-id=\"${item.id || -1}\"\n type-node=\"${item.type || \"\"}\">\n\n ${strMsg}\n <div class=\"float-box-content\">`;\n let strExt = `\n <div class=\"float-box-ext ${isClosed ? \"hide\" : \"\"}\"\n style=\"${position ? position : \"\"}\"\n item-id=\"${item.id || -1}-ext\"\n type-node=\"${item.type || \"\"}\">\n <div class=\"long-bar-container\">`;\n\n if (tab && tab.floatBox) {\n if (tab.floatBox.plots) {\n str += `<div class=\"plot-floatbox-container\">`;\n tab.floatBox.plots.forEach(n => {\n let cssVars = \"\";\n let className = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName) !== null) {\n if (n.color) {\n cssVars = `--local-color:${n.color};`;\n }\n\n className = n.className || \"\";\n str += `<div class=\"plot-floatbox ${className} ${n.style || \"\"}\" style=\"${cssVars} \"></div>`;\n }\n });\n str += `\n </div>`;\n }\n\n if (tab.floatBox.icons) {\n tab.floatBox.icons.forEach(iconConfig => {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n let viewBox = \"0 0 24 24\";\n let icon = iconConfig.icon || null;\n\n if (iconConfig.varName) {\n let iconVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.varName);\n\n if (iconVar) {\n icon = iconVar;\n }\n }\n\n if (iconConfig.className) {\n className = iconConfig.className;\n }\n\n if (iconConfig.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(iconConfig.color)) {\n colorStyle = `--local-color: ${iconConfig.color};`;\n } else {\n colorClass = iconConfig.color;\n }\n }\n\n if (iconConfig.colorVarName) {\n let colorVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.colorVarName);\n\n if (colorVar) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(colorVar)) {\n colorStyle = `--local-color: ${colorVar};`;\n } else {\n colorClass = colorVar;\n }\n }\n }\n\n str += `\n <div class=\"icon-floatbox ${className} ${colorClass ? \"has-color\" : \"\"}\" style=\"${colorStyle}\">\n <svg viewBox=\"${viewBox}\">\n <path d=\"${icon}\" />\n </svg>\n </div>\n `;\n });\n } //numeros en el floatBox\n\n\n if (tab.floatBox.nums) {\n tab.floatBox.nums.forEach(n => {\n if (tab.legends && n.tabKey) {\n let legend = tab.legends.find(l => l.key == n.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n let classNamesExt = \"\";\n let colorStyleExt = \"\";\n let cssVars = \"\";\n\n if (n.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName);\n }\n\n if (n.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varShow)); // Si no hay varName pero hay varShow, establecer dataFloatBox como string vacío para renderizar bloque vacío\n\n if (!n.varName) {\n dataFloatBox = \"\";\n } else {\n dataFloatBox = dataFloatBox || \"\";\n }\n }\n\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n if (n.hidden === true) {\n hideIf = true;\n }\n\n if (n.shape) {\n className += \"shape-\" + n.shape;\n }\n\n if (n.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(n.color)) {\n colorStyle = `--local-color: ${n.color};`;\n } else {\n colorClass = n.color;\n }\n }\n\n if (n.longBar) {\n let longBarColor = \"\";\n let longBarOpacity = \"\";\n\n if (n.longBarColor) {\n longBarColor = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarColor);\n }\n\n if (longBarColor) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(longBarColor)) {\n colorStyleExt = `--local-color: ${longBarColor};`;\n } else {\n classNamesExt += longBarColor + \"-light \";\n }\n } else if (colorClass && colorClass != \"\") {\n classNamesExt += colorClass;\n } else if (colorStyle && colorStyle != \"\") {\n colorStyleExt = colorStyle;\n }\n\n if (n.longBarOpacity) {\n longBarOpacity = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarOpacity) || null;\n\n if (longBarOpacity) {\n colorStyleExt += \"--local-opacity: \" + longBarOpacity + \";\";\n }\n }\n\n if (n.longBarClassName) {\n classNamesExt += _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarClassName) || \"\";\n }\n\n let longBar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBar);\n\n if (longBar) {\n cssVars = `--long:${longBar};`;\n }\n }\n\n if (dataFloatBox !== null && showIf && !hideIf) {\n str += `<span class=\"data ${colorClass} ${className}\" style=\"${colorStyle}\">\n ${typeof dataFloatBox == \"string\" ? dataFloatBox : \"\"}\n ${typeof dataFloatBox == \"number\" ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(dataFloatBox, n.round) : \"\"}\n </span>`;\n\n if (n.longBar && cssVars) {\n strExt += `<div class=\"long-bar ${classNamesExt}\" style=\"${colorStyleExt} ${cssVars} \"></div> `;\n }\n }\n });\n } //puntos en el floatBox\n\n\n if (tab.floatBox.dots) {\n str += `<div class=\"dot-container-middle\">`;\n tab.floatBox.dots.forEach(dot => {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName) !== null) {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.shape) {\n className += dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n str += `\n <div class=\"dot ${colorClass} ${className}\" style=\"${colorStyle}\" ></div>`;\n }\n });\n str += `\n </div>`;\n } //fila de puntos en floatBox\n\n\n if (tab.floatBox.rowDots) {\n tab.floatBox.rowDots.forEach(row => {\n let freeColumns = 4;\n str += `<span class=\"rowdot--row \">`;\n row.forEach(dot => {\n if (tab.legends && dot.tabKey) {\n let legend = tab.legends.find(l => l.key == dot.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName);\n dataFloatBox = parseInt(dataFloatBox);\n }\n\n if (dot.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varShow));\n dataFloatBox = dataFloatBox || \"\";\n }\n\n if (dot.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varHide));\n }\n\n if (dot.shape) {\n className += \" shape-\" + dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n if (dataFloatBox !== null && dataFloatBox > 0 && showIf && !hideIf && freeColumns > 0) {\n let n = dataFloatBox > freeColumns ? freeColumns : dataFloatBox;\n freeColumns -= n;\n\n for (let index = 0; index < n; index++) {\n str += `<div class=\"rowdot--dot ${colorClass} ${className}\" style=\"${colorStyle}\"></div>`;\n }\n }\n });\n str += `</span>`;\n });\n }\n }\n\n str += `\n </div>\n </div>`;\n strExt += `\n </div>\n </div>`;\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $elemExt = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strExt);\n $elem.addEventListener(\"mouseover\", e => {\n $elem.dispatchEvent(new CustomEvent(\"mouseOverFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: item,\n data: data,\n originalEvt: e\n }\n }));\n });\n $elem.addEventListener(\"click\", e => {\n $elem.dispatchEvent(new CustomEvent(\"clickFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: item,\n data: data,\n originalEvt: e\n }\n }));\n });\n container.appendChild($elem);\n container.appendChild($elemExt);\n },\n\n /**\n * Crea DetailDay, detalle de valores de item y Dia\n * se usa para:\n * - Muestra nombre de item y detalles\n * - Muestra capsulas de datos\n * - Muestra Pills, pildoras de datos resumidos\n * - Muestra alertas\n * - Muestra Mensaje\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @param {Boolean} [onlyStringContent = false] - para escoger si devuelve String o DomElement\n * @return {String|Object} Elemento como String o DomElement\n */\n createDetailDay(config, item = {}, dataDay, tabSelected, onlyStringContent = false) {\n let str = `\n <div class=\"header-detail\">\n <div class=\"title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"subtitle\">\n ${dataDay ? _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(dataDay.date) : \"\"}\n </div>\n </div>\n\n <div class=\"list-detail list column-flex\">`; //CAPSULES\n\n let visibleItemsCount = 0; // Contador de elementos visibles\n\n if (dataDay) {\n config.timeline.detailDay.capsules.forEach(cap => {\n //para comprobar si tiene datos, se obtiene el primer valor\n //de la lista de values de una capsula\n let hasValues = cap.values.filter(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName);\n return value !== null && !(Array.isArray(value) && value.length === 0);\n }).length > 0;\n let hideIf = false;\n\n if (cap.hideIf) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, cap.hideIf));\n }\n\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (cap.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(cap.color)) {\n colorStyle = `--local-color: ${cap.color};`;\n colorStyle += `--local-color-font: ${cap.color};`;\n } else {\n colorClass = cap.color;\n }\n }\n\n if (hasValues && !hideIf) {\n visibleItemsCount++; // Incrementar contador de elementos visibles\n\n str += `\n <div class=\"item-detail ${colorClass}\" style=\"${colorStyle}\">\n\n <div class=\"left-icon ${cap.shape || \"\"} \"></div>\n\n <div class=\"name\">\n <span>\n ${cap.title || \"\"}\n </span>\n </div>`;\n str += `\n <div class=\"item-description\"> `;\n cap.values.forEach(v => {\n let value = v.varName ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName) : null;\n\n if (cap.isLabeledArray) {\n value.forEach(valueLabeled => {\n let outputValue = null;\n let valueName = v.valueName ? v.valueName : \"value\";\n let tempValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(valueLabeled, valueName);\n\n if (tempValue) {\n outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(tempValue, v.round) : tempValue;\n }\n\n if (v.formatter) {\n outputValue = v.formatter(valueLabeled);\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n str += outputValue == null ? \"\" : `\n <div class=\"desc ${v.showColumn ? \"desc-column\" : \"\"}\">\n \n <div class=\"label\">\n ${v.hideLabel ? \"\" : valueLabeled.label}\n </div >\n <div class=\"val\">` + (v.hidePreffix !== true ? `\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>` : \"\") + `<span class=\"value\">\n ${outputValue}\n </span>` + (v.hideSuffix !== true ? `\n <span class=\"suffix\">\n ${valueLabeled.suffix || v.suffix || \"\"}\n </span>` : \"\") + `\n </div>\n </div>`;\n });\n } else {\n let outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round) : value;\n\n if (v.formatter) {\n outputValue = v.formatter({\n options: v,\n dataDay,\n outputValue\n });\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n if (outputValue) {\n str += `\n <div class=\"desc\">\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>\n <span class=\"value\">\n ${outputValue}\n </span>\n <span class=\"suffix\">\n ${v.suffix || \"\"}\n </span>\n </div>`;\n }\n }\n });\n str += `\n </div>`;\n str += `\n </div>`; // end .item-detail\n }\n });\n } // Agregar clase single-item si solo hay un elemento visible\n\n\n const columnClass = visibleItemsCount === 1 ? \"list column-flex single-item\" : \"list column-flex\";\n str = str.replace(\"list column-flex\", columnClass);\n str += `\n </div>`; // list-detail\n //PILLS\n\n if (config.timeline.detailDay.pillsVarName && dataDay && dataDay.values[config.timeline.detailDay.pillsVarName]) {\n str += `\n <div class=\"elements-detail\">\n <div class=\"name\"> ${config.timeline.detailDay.pillsTitle} </div>\n <div class=\"elements-list\">`;\n dataDay.values[config.timeline.detailDay.pillsVarName].forEach(e => {\n let value = e.value;\n\n if (typeof outputValue == \"number\") {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(value);\n }\n\n str += `\n <div class=\"element-detail\">\n <b>${e.label}</b>\n ${value}\n </div>`;\n });\n str += `\n </div>\n </div>`; //end .element-detail > .element-list\n } //str += `</div>`;\n\n\n if (dataDay && dataDay.errors && dataDay.errors.length > 0) {\n dataDay.errors.forEach(err => {\n str += `\n <div class=\"alert\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].alert}\n ${err.label}\n </div>`;\n });\n }\n\n let msg = null;\n let author = null;\n let dateMsg = null;\n\n if (dataDay && tabSelected.floatBox && tabSelected.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, tabSelected.floatBox.messagePath);\n }\n\n if (!msg && dataDay && dataDay.message && dataDay.message.value) {\n msg = dataDay.message.value;\n author = dataDay.message.author;\n dateMsg = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(new Date(dataDay.message.date));\n }\n\n if (msg) {\n //msg = msg.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n str += `\n <div class=\"msj-container\">\n <div class=\"msj\">\n <pre>${msg || \"\"}</pre>\n </div>\n <div class=\"msj-detail\">\n <span class=\"email\"> ${author || \"\"} </span>\n <span class=\"date\"> ${dateMsg || \"\"} </span>\n </div>\n </div>`;\n }\n\n let strContainer = `<div class=\"detail-day dd-hide\"> ${str} </div>`;\n if (onlyStringContent) return str;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strContainer);\n },\n\n /**\n * Recrea HTML de detailDay\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @return {String} Elemento como String, de detailDay\n */\n redrawDetailDay(config, item, dataDay, tabSelected) {\n return this.createDetailDay(config, item, dataDay, tabSelected, true);\n },\n\n /**\n * Reposiciona FloatBox\n * verifica si el parent esta desplegado, para ocultar los datos\n *\n * Solo actualiza las alturas de los floatbox\n * no recrea los floatbox, es mas optimo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n */\n repositionFloatBox(config, $floatBoxContainer) {\n $floatBoxContainer.querySelectorAll(\".float-box\").forEach($f => {\n let itemId = $f.getAttribute(\"item-id\");\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n let item, parent;\n ({\n item,\n parent\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"child\", true));\n\n if (item) {\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item);\n $f.style.top = top * itemHeight + \"px\";\n\n if (parent && parent.isClosed) {\n $f.classList.add(\"hide\");\n } else if ($f.classList.contains(\"hide\")) {\n $f.classList.remove(\"hide\");\n }\n }\n });\n },\n\n /**\n * Recrea indicadores de dias seleccionados\n *\n * @param {Object} $elem - Elemento Dom donde crea los elementos seleccionados\n * @param {Object[]} selected - Array con los dias seleccionados\n * @return {Object} Elemento Dom que contiene los indicadores de dias seleccionados\n */\n redrawSelectBoard($elem, selected) {\n $elem.innerHTML = \"\";\n let hasNumber = true;\n\n if (selected) {\n if (selected.length == 1) hasNumber = false;\n selected.forEach(s => {\n let attributes = [];\n\n if (hasNumber) {\n attributes.push({\n name: \"cap-badge\",\n value: s.index\n });\n }\n\n let $s = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"selected-day\",\n attributes\n });\n $s.style.left = s.pos.left + \"px\";\n $s.style.top = s.pos.top + \"px\";\n $elem.append($s);\n });\n }\n\n return $elem;\n },\n\n /**\n * Obtiene String con estilos CSS de la posicion de un floatBox\n * calculado segun item y fecha de los valores\n *\n * @param {Object} config - Configuracion capibara, para ver fecha de inicio\n * @param {Object} data - Datos del dia indicado\n * @param {Object} item - Item relacionado\n * @return {String} String CSS top y left , para posicionar floatBox en table\n */\n getPositionFloatBox(config, data, item, typeNode) {\n let left = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, data.date);\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item, typeNode);\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n left *= dayWidth;\n top *= itemHeight;\n return \"top: \" + top + \".5px; left:\" + left + \".5px;\";\n },\n\n /**\n * Crea Boton como elemento Dom\n *\n * @param {Object} props - propiedades para boton\n * @param {String} props.className - classes css para boton\n * @param {*} props.key - key para identificar a boton\n * @param {String} props.label - Texto boton\n * @return {Object} Elemento Dom del boton creado\n */\n createButton(props) {\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"${props.className || \"\"}\" input-key=\"${props.key || \"\"}\">\n ${props.label || \"\"}\n </button>`);\n },\n\n /**\n * Crea Botones de guardar y cancelar los datos de formulario del sidebar derecho\n *\n * @return {Object} Elemento Dom del botones creados\n */\n createNavRightbuttons(config) {\n let btnSection = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`<div class=\"button-section\"></div>`);\n\n if (config.timeline.nav.right && config.timeline.nav.right.hideSaveButton != true) {\n let saveBtn = this.createButton({\n label: \"Guardar\",\n className: \"cap-btn-raised\"\n });\n btnSection.appendChild(saveBtn);\n saveBtn.addEventListener(\"click\", e => {\n saveBtn.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n if (config.timeline.nav.right && config.timeline.nav.right.hideCancelButton != true) {\n const cancelLabelButton = config.timeline.nav.right.cancelLabelButton || \"Cancelar\";\n let cancelBtn = this.createButton({\n label: cancelLabelButton,\n className: \"cap-btn-outline\"\n });\n btnSection.appendChild(cancelBtn);\n cancelBtn.addEventListener(\"click\", e => {\n cancelBtn.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return btnSection;\n },\n\n /**\n * Crea Input como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @param {Object[]} [selected = []] - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom del input creado\n */\n createInput(props, dataDay = null, daySelected = null, selected = [], tabSelected) {\n let r = null;\n if (props.ignoreRender == true) return r;\n\n switch (props.type) {\n case \"custom\":\n r = props.render ? props.render({\n props,\n dataDay,\n daySelected,\n selected\n }) : null;\n r.setAttribute(\"input-key\", props.key);\n break;\n\n case \"select\":\n r = this.createInputSelect(props, dataDay, daySelected);\n break;\n\n case \"file\":\n r = this.createInputFile(props, dataDay);\n break;\n\n case \"fileLink\":\n r = this.createFileLink(props, dataDay);\n break;\n\n case \"text\":\n r = this.createText(props, selected);\n break;\n\n case \"title\":\n r = this.createTitle(props);\n break;\n\n case \"number\":\n r = this.createInputNumber(props, dataDay);\n break;\n\n case \"float\":\n r = this.createInputFloat(props, dataDay);\n break;\n\n case \"message\":\n r = this.createInputMessage(props, dataDay);\n break;\n\n case \"textarea\":\n r = this.createInputTextArea(props, dataDay);\n break;\n\n case \"checkbox\":\n r = this.createInputCheckbox(props, dataDay);\n break;\n\n case \"inputList\":\n r = this.createInputList(props, dataDay, daySelected);\n break;\n\n case \"input-box\":\n r = this.createInputBox(props, dataDay);\n break;\n\n case \"list\":\n r = this.createList(props, dataDay);\n break;\n\n case \"data-list\":\n r = this.createDataList(props, dataDay, daySelected, selected, tabSelected);\n break;\n\n case \"button\":\n r = this.createInputButton(props, dataDay);\n break;\n\n case \"buttons-group\":\n r = this.createInputButtonsGroup(props, dataDay);\n break;\n\n case \"time\":\n r = this.createInputTime(props, dataDay);\n break;\n\n case \"input-text\":\n default:\n r = this.createInputText(props, dataDay);\n }\n\n return r;\n },\n\n /**\n * Crea Input con formato Hora, como elemento Dom\n *\n * Usa 2 inputs, hora y minutos\n *\n * el value que interpreta es String HH:MM\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTime(props, dataDay) {\n let hhValue = \"\";\n let mmValue = \"\";\n\n if (dataDay && dataDay.values) {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n\n if (value) {\n value = value.split(\":\");\n hhValue = value[0];\n mmValue = value[1];\n }\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label || \"\"}\n </span>\n <div class=\"d-flex\">\n <div class=\"time\">\n <input type=\"number\"\n class=\"hour\"\n id=\"test\"\n placeholder=\"00\"\n min=\"0\"\n max=\"99\"\n value=\"${hhValue}\">\n <span class=\"symbol\">:</span>\n <input type=\"number\"\n class=\"minutes\"\n placeholder=\"00\"\n min=\"0\"\n max=\"59\"\n value=\"${mmValue}\">\n </div>\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let $hhInput = $elem.querySelector(\".hour\");\n let $mmInput = $elem.querySelector(\".minutes\");\n $hhInput.addEventListener(\"input\", e => {\n $hhInput.dispatchEvent(new CustomEvent(\"changeTimeInputHH\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n $mmInput.addEventListener(\"input\", e => {\n $mmInput.dispatchEvent(new CustomEvent(\"changeTimeInputMM\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n this.addKeyDownInputEvents($hhInput, $elem, props);\n this.addKeyDownInputEvents($mmInput, $elem, props);\n return $elem;\n },\n\n /**\n * Crea Text como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createText(props, selected) {\n let label = props.label;\n\n if (props.formatter) {\n label = props.formatter({\n selected\n });\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide \" : \"\"} ${props.toLeft ? \"to-left \" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${props.classNames || \"\"}\">\n ${label}\n </span>\n </div>`);\n return $elem;\n },\n\n /**\n * Crea Title como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createTitle(props) {\n let classNames = \"text-title\";\n\n if (props.isSubtitle) {\n classNames = \"text-subtitle\";\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${classNames}\">\n ${props.label}\n </span>\n </div>`);\n },\n\n /**\n * Crea Input tipo Numerico como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputNumber(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n value = value || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n <span class=\"text-subtitle-2 \">\n ${props.suffix ? \"(\" + props.suffix + \")\" : \"\"}\n </span>\n </div>\n <div class=\"d-flex\">\n <input type=\"number\"\n class=\"nav-input\"\n value=\"${value}\">\n\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input tipo FIlepicker como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFile(props, dataDay) {\n let value = \"\";\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n value = value || \"\";\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"nav-input-file\" >\n <button class=\"small-close clear-file-input\">x</button>\n <label >\n <span class=\"nav-input-file-label\">\n ${props.pickerLabel || \"Seleccionar Archivo\"}\n </span>\n <input type=\"file\" value=\"${value}\">\n </label>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n let $inputElem = elem.querySelector(\"input\");\n let $clearBtn = elem.querySelector(\".clear-file-input\");\n let $fileInputLabel = elem.querySelector(\".nav-input-file-label\");\n $inputElem.addEventListener(\"change\", evt => {\n let fileName = $inputElem.files[0].name;\n $fileInputLabel.textContent = fileName;\n });\n $clearBtn.addEventListener(\"click\", evt => {\n $inputElem.value = \"\";\n $fileInputLabel.textContent = props.pickerLabel || \"Seleccionar Archivo\";\n evt.stopPropagation();\n });\n return elem;\n },\n\n createFileLink(props, dataDay) {\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n //value = utils.getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n if (fileName == \"\") return null;\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n return elem;\n },\n\n /**\n * Crea lista de Inputs, con array de valores, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @return {Object} Elemento Dom del input creado\n */\n createInputList(props, dataDay, daySelected = null) {\n let inputList = []; //obtiene inputs default, para crearlos, sin valores\n\n if (daySelected && Array.isArray(daySelected.item.values[props.inputList])) {\n inputList = daySelected.item.values[props.inputList].map(inputRow => {\n //limpia inputList inputs\n inputRow.inputs.map(input => {\n input.value = null;\n return input;\n }); //obtiene valores del dia\n\n if (dataDay && dataDay.values) {\n let inputValues = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.valuesPath); //autorrellena\n\n if (inputValues) {\n inputRow.inputs.forEach(input => {\n let values = inputValues.find(v => v.id == inputRow.id);\n input.value = values ? values[input.varName] : null;\n });\n }\n }\n\n return inputRow;\n });\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"input-section-list ${props.isHidden ? \"hide\" : \"\"} \">\n <div class=\"input-section-title\">\n <span class=\"text-title\">\n ${props.label}\n </span> \n </div>`;\n inputList.forEach(inputRow => {\n str += `\n <div class=\"input-section ${props.toRight ? \"to-right\" : \"\"}\" >\n <span class=\"text-subtitle\">\n ${inputRow.label}\n </span>`;\n inputRow.inputs.forEach(input => {\n str += ` \n <div class=\"input-section-col\" >\n <span class=\"text-subtitle \">\n ${input.label}\n </span>\n <input type=\"number\"\n input-id=\"${inputRow.id}\"\n input-label=\"${input.label}\"\n class=\"nav-input small\"\n value=\"${input.value}\">\n </div>`;\n });\n str += `\n </div>`;\n });\n str += `</div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let inputsElem = elem.querySelectorAll(\"input\");\n inputsElem.forEach(inputElem => this.addKeyDownInputEvents(inputElem, elem, props));\n return elem;\n },\n\n createInputSelect(props, dataDay, daySelected = null) {\n let value = null;\n let options = props.options;\n\n if (dataDay && dataDay.values) {\n let val = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n value = val ? val.value : null;\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"${props.isHidden ? \"hide\" : \"\"}\" >\n <div class=\"input-section \" >\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n\n <select class=\"input-select\">\n\n <option value=\"\" ${value == null ? \"selected\" : \"\"}>\n ${props.noDataLabel || \"-- sin asignar --\"}\n </option>\n\n `;\n options.forEach(option => {\n str += `\n <option value=\"${option.id}\" ${option.id == value ? \"selected\" : \"\"}>\n ${option.label}\n </option>\n `;\n });\n str += `\n\n </select>\n </div>\n\n </div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n return elem;\n },\n\n /**\n * Crea Input de texto TextArea como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTextArea(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <textarea class=\"\" value=\"${value}\"></textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input de Mensaje como elemento Dom\n * utiliza TextArea\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputMessage(props, dataDay) {\n let value = dataDay ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) : null;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section to-left msj-input-container ${props.isHidden ? \"hide\" : \"\"} \"\n input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n Mensaje\n </span>\n <textarea class=\"msj\">${value || \"\"}</textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\"); //this.addKeyDownInputEvents(inputElem);\n\n return elem;\n },\n\n /**\n * Crea Input de texto como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputText(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"text\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input Numero Flotante, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFloat(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"number\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n createDataList(props, dataDay, daySelected, selected, tabSelected) {\n let list = [];\n\n if (dataDay && dataDay.values) {\n list = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) || [];\n }\n\n let searchInput = props.hideSearch ? \"\" : ` <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>`;\n let editBtn = \"\";\n\n if (props.editButton) {\n editBtn = `<button class=\"cap-btn-raised cap-btn-sm edit-btn\" input-key=\"${props.editButton.key}\">\n ${props.editButton.label} \n </button> `;\n }\n\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n ${editBtn}\t\n </div>\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n ${searchInput}\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $searchInput = $el.querySelector(\".search-input\");\n let $searchInputClear = $el.querySelector(\".search-input-clear\");\n let $inputBox = $el.querySelector(\".input-box\");\n let $items = list.map((item, j) => {\n let label = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLabel) || dataDay.label || \"__\";\n let $elItem = this.createDataListItem({\n label,\n valueText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameValueText) || \"\",\n subText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSubText) || \"\",\n id: \"list-item-\" + (dataDay.id || j),\n key: \"list-item-\" + (dataDay.id || j),\n tooltip: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameTooltip) || label,\n //colorIcon: \"c-red\",\n link: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLink) || null,\n suffix: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSuffix) || \"\" //value: JSON.stringify(utils.getVarByPath(item, props.varNameInput)) || {}\n\n });\n $inputBox.appendChild($elItem);\n });\n\n if ($searchInput) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $inputs = [];\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n if (props.editButton.onClick) {\n let button = $el.querySelector(\"button.edit-btn\");\n\n if (button && props.editButton) {\n button.addEventListener(\"click\", e => props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el,\n tabSelected\n }));\n }\n\n $items.forEach($i => {\n $el.addEventListener(\"click\", e => {\n props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el,\n tabSelected\n });\n });\n });\n }\n\n return $el;\n },\n\n createDataListItem({\n label = \"\",\n valueText = \"\",\n subText = \"\",\n id = \"\",\n key = \"\",\n tooltip = \"\",\n colorIcon = \"\",\n link = null,\n suffix = null,\n value = \"\"\n }) {\n let tooltipStr = \"\";\n let iconStr = null;\n let linkStr = \"\";\n let str = \"\";\n\n if (tooltip) {\n tooltipStr = `\n <div class=\"mini-input-section--tooltip\">\n ${tooltip}\n </div>`;\n }\n\n if (colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(itemFormated.colorIcon)) {\n iconStr = `<div class=\"mini-input-section--icon\" style=\"background:${colorIcon}\"> </div>`;\n } else {\n iconStr = `<div class=\"mini-input-section--icon ${colorIcon}\"> </div>`;\n }\n }\n\n if (link) {\n linkStr = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${link}\">${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}</a> `;\n }\n\n str += `\n <div class=\"mini-input-section clickeable ${iconStr ? \"has-icon\" : \"\"} \" \n label=\"${label}\" \n data-id=\"${id}\"\n data-key=\"${key}\"\n data-value=\"${value || \"\"}\"\n >\n <label>\n ${iconStr || \"\"}\n\n <div class=\"mini-input-section--titles\">\n <div class=\"mini-input-section--title truncate\">\n ${label}\n </div>\n <div class=\"mini-input-section--subtitle truncate\">\n ${subText}\n </div>\n </div>\n\n <div class=\"mini-input-section--content\" >\n ${valueText}\n </div>\n <div class=\"mini-input-section--suffix\" >\n ${suffix}\n </div>\n\n ${linkStr}\n\n </label>\n ${tooltipStr}\n </div>`;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n createList(props, dataDay) {\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `; //TODO obtener input segun fila\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = null;\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon || \"\"}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let tooltip = \"\";\n let icon = null;\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n\n ${icon}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n <div class=\"mini-input-section--footer\">\n <span class=\"start\"> start</span>\n <span class=\"end\"> end </span>\n </div>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n return $el;\n },\n\n /**\n * Crea InputBox, como elemento Dom\n * un InputBox es un contenedor con una lista de inputs\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputBox(props, dataDay) {\n let value = [];\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `;\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let value_found = value ? value.find(val => val.id == i.id) : null;\n let v = value_found || \"\";\n let inputValue = props.varNameInput && v[props.varNameInput] ? v[props.varNameInput] : v.value;\n let tooltip = \"\";\n let icon = \"\";\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n <input type=\"number\"\n class=\"mini-input\"\n input-id=\"${i.id || \"\"}\"\n input-key=\"${i.key || i.label}\"\n value=\"${inputValue || \"\"}\">\n\n ${icon || \"\"}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputs = $el.querySelectorAll(\"input.mini-input\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n $inputs.forEach(i => this.addKeyDownInputEvents(i, $el, props));\n return $el;\n },\n\n selectInputBoxTab($tab, $el) {\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputSections = $el.querySelectorAll(\".mini-input-section\") || [];\n $tabs.forEach(t => {\n t.classList.remove(\"active\");\n });\n\n if ($tab) {\n $tab.classList.add(\"active\");\n $inputSections.forEach(i => {\n let key = i.getAttribute(\"input-tab-key\");\n\n if (key == $tab.getAttribute(\"tab-key\")) {\n i.classList.remove(\"hide\");\n } else {\n i.classList.add(\"hide\");\n }\n });\n }\n },\n\n /**\n * Crea Checkbox, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputCheckbox(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <label>\n <input type=\"checkbox\" name=\"${props.key || \"\"}\" input-key=\"${props.key || \"\"}\" ${value ? \"checked\" : \"\"}>\n ${props.label}\n </label>\n </div>`);\n return r;\n },\n\n createInputButtonsGroup(props) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"buttons-group\"> </div>\n </div>`);\n let $containerButtonGroup = $container.querySelector(\".buttons-group\");\n let $buttons = [];\n $buttons = props.buttons.map(buttonProp => {\n let buttonStr = `\n <button \n name=\"${buttonProp.key || \"\"}\" \n input-key=\"${buttonProp.key || \"\"}\"\n class=\"cap-btn-outline cap-btn-sm ${buttonProp.isSelected ? \"selected\" : \"\"} \">\n ${buttonProp.label}\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(buttonStr);\n $containerButtonGroup.append($button);\n $button.addEventListener(\"click\", e => {\n if (props.isSelectable) {\n $buttons.forEach($b => $b.classList.remove(\"selected\"));\n $button.classList.add(\"selected\");\n }\n\n buttonProp.onClick({\n props,\n event: e,\n buttonsElements: $buttons\n });\n });\n return $button;\n });\n return $container;\n },\n\n createInputButton(props, dataDay) {\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <button \n name=\"${props.key || \"\"}\"\n input-key=\"${props.key || \"\"}\"\n class=\"cap-btn-outline\">\n ${props.label}\n </button>\n </div>`);\n let button = r.querySelector(\"button\");\n button.addEventListener(\"click\", e => props.onClick({\n props,\n event: e,\n dataDay\n }));\n return r;\n },\n\n addKeyDownInputEvents($input, $inputContainer, props) {\n $input.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n //ENTER\n $input.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n\n if (event.keyCode === 27) {\n //ESC\n $input.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n });\n $input.addEventListener(\"input\", e => {\n if (props.onInput) {\n props.onInput({\n event: e,\n value: e.srcElement.value,\n props,\n $element: $inputContainer\n });\n }\n });\n },\n\n createContextMenu({\n config,\n target,\n $capibaraElem = null,\n evt = null,\n date = null,\n item = null,\n selected = [],\n tabSelected = null,\n left = null,\n top = null,\n name = \"\"\n }) {\n if (config.timeline.contextMenu === undefined || config.timeline.contextMenu.options == undefined) return {\n elem: null,\n isVisible: false\n };\n let className = \"\";\n let style = \"\";\n let strHtml = \"\";\n let leftPosition = null;\n let topPosition = null;\n let isVisible = true;\n let boundRectCapibara = null;\n let gap = 15; //px\n\n if ($capibaraElem) {\n boundRectCapibara = $capibaraElem.getBoundingClientRect();\n }\n\n if (evt && boundRectCapibara) {\n left = evt.clientX;\n top = evt.clientY - boundRectCapibara.top;\n }\n\n if (left) {\n leftPosition = left;\n }\n\n if (top) {\n topPosition = top;\n }\n\n if (leftPosition !== null & topPosition !== null) {\n if (boundRectCapibara) {\n let transformStyle = \"\";\n\n if (topPosition > boundRectCapibara.height * 2 / 6 && topPosition <= boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-50%)`;\n }\n\n if (topPosition > boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-100%)`;\n }\n\n if (leftPosition > boundRectCapibara.width * 4 / 6) {\n transformStyle += `translateX(-100%)`;\n leftPosition -= gap;\n } else {\n leftPosition += gap;\n }\n\n if (transformStyle != \"\") {\n style += ` transform: ${transformStyle};`;\n }\n }\n\n style += `top: ${topPosition}px; left: ${leftPosition}px;`;\n } else {\n className += \"cm-hide\";\n isVisible = false;\n }\n\n strHtml += ` <div class=\"cap-context-menu-container ${className}\">\n <div class=\"cap-context-menu\" style=\"${style}\">\n </div>\n </div>`;\n let $contextMenuContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strHtml);\n let $contextMenu = $contextMenuContainer.querySelector(\".cap-context-menu\");\n let hasSomeoption = false;\n config.timeline.contextMenu.options.forEach(option => {\n if (option.showIf) {\n let show = option.showIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n if (!show) return;\n }\n\n let isEnabled = true;\n let isClickeable = true;\n\n if (option.enableIf) {\n isEnabled = option.enableIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n }\n\n let optionClassName = \"\";\n let strIcon = \"\";\n let label = \"\";\n\n if (!isEnabled) {\n optionClassName += \"is-disabled \";\n }\n\n if (option.isDivider) {\n isClickeable = false;\n optionClassName += \"is-divider \";\n }\n\n if (option.label) {\n label = `<span>${option.label}</span>`;\n }\n\n if (option.icon) {\n strIcon = `<div class=\"cap-context-menu_item_icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"${option.icon}\" />\n </svg>\n </div>`;\n }\n\n let optionStrHtml = `\n <div class=\"cap-context-menu_item ${optionClassName}\">\n ${strIcon}\n ${label}\n </div>`;\n let $option = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(optionStrHtml);\n\n if (isEnabled && isClickeable) {\n $option.addEventListener(\"click\", evtClick => option.onClick({\n config,\n evt: evtClick,\n date,\n item,\n selected,\n tabSelected,\n target\n }));\n } else {\n $option.addEventListener(\"click\", evtClick => {\n evtClick.preventDefault();\n evtClick.stopPropagation();\n });\n }\n\n $contextMenu.append($option);\n hasSomeoption = true;\n });\n return {\n elem: $contextMenuContainer,\n isVisible\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzPzFkODYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSBmcm9tIFwiLi4vdXRpbC9kb21VdGlsc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlsL3V0aWxzXCI7XG5pbXBvcnQgZGF0ZVV0aWxzIGZyb20gXCIuLi91dGlsL2RhdGVVdGlsc1wiO1xuaW1wb3J0IGljb25zIGZyb20gXCIuLi91dGlsL2ljb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqXG4gICAqIENyZWEgZWxlbWVudG8gVGFibGVcbiAgICogQ29udGVuZHLDoSBsb3MgZWxlbWVudG9zIHF1ZSBhcGFyZWNlcmFuIGRlbnRybyBkZSBsYSB0YWJsYSBkZSBwbGFuaWxsYVxuICAgKiBTZSBVc2EgcGFyYSA6XG4gICAqICAgIC0gQWdyZWdhciBiYWNrZ3JvdW5kIGNvbiBwYXRyb24gZXN0aWxvIHRhYmxhXG4gICAqICAgIC0gQWdyZWdhciBkYXlNb3VzZU92ZXIsIGRpdiBxdWUgaW5kaWNhIHBvc2ljaW9uIGRlIG1vdXNlXG4gICAqICAgIC0gQWdyZWdhciBEZXRhaWxEYXksIHBhcmEgZGV0YWxsZXMgZGUgZGF0b3MgZW4gdGFibGFcbiAgICogICAgLSBBZ3JlZ2FyIFNlbGVjdGVkQ29udGFpbmVyLCBwYXJhIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiAgICAtIEFncmVnYXIgRmxvYXRCb3hDb250YWluZXIsIHBhcmEgdmlzdWFsaXphY2lvbiBkZSBkYXRvcyBlbiB0YWJsYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUFnVGFibGUoY29uZmlnKSB7XG4gICAgbGV0IGUgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjYXBpYmFyYVwiIH0pO1xuICAgIGlmIChjb25maWcudGltZWxpbmUuZGFyaykge1xuICAgICAgZS5jbGFzc0xpc3QuYWRkKFwiZGFyay10aGVtZVwiKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmlzU2hvdykge1xuICAgICAgZS5jbGFzc0xpc3QuYWRkKFwiaGVhZGVyLWV4dGVuZGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lICYmIGNvbmZpZy50aW1lbGluZS5mb3JjZU1vYmlsZSA9PT0gdHJ1ZSkge1xuICAgICAgZS5jbGFzc0xpc3QuYWRkKFwiZm9yY2UtbW9iaWxlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIEJhY2tncm91bmQsIHF1ZSBlcyBlbCBmb25kbyBncmlkLCBjb21vIHRhYmxhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIHJlbGFjaW9uYWRvLCBkb25kZSBzZSBjcmUgZWwgYmFja2dyb3VuZFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICByZWRyYXdCYWNrZ3JvdW5kKGNvbmZpZywgJGVsZW0pIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYWNrZ3JvdW5kKGNvbmZpZywgJGVsZW0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIHkgcG9zaWNpb25hIGZvbmRvIGRlIHRhYmxhXG4gICAqIEVzdGUgZm9uZG8gY29udGllbmUgdW4gcGF0cm9uIGRlIENTUyBxdWUgbGUgZGEgbGEgYXBhcmllbmNpYSBkZSB0YWJsYVxuICAgKiBwb3IgbG8gY3VhbCBzZSBkZWJlIHJlcG9zaWNpb25hciBzZWd1biBsYSBmZWNoYSBkZSBpbmljaW8sIHBhcmEgaGFjZXJcbiAgICogY2FsemFyIGxvcyBmaW5lcyBkZSBzZW1hbmFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IFskZWxlbSA9IG51bGxdIC0gRWxlbWVudG8gYmFja2dyb3VuZCwgc2kgZXMgbnVsbCwgbG8gY3JlYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGVsZW1lbnRvIERvbSBCYWNrZ3JvdW5kXG4gICAqL1xuICBjcmVhdGVCYWNrZ3JvdW5kKGNvbmZpZywgJGVsZW0gPSBudWxsKSB7XG4gICAgbGV0IHsgaGVpZ2h0LCB3aWR0aCwgZGF5V2lkdGggfSA9IHV0aWxzLmdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpO1xuXG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLnN0YXJ0KTtcbiAgICBsZXQgZW5kID0gbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLmVuZCk7XG5cbiAgICBlbmQuc2V0VGltZShlbmQuZ2V0VGltZSgpICsgZGF0ZVV0aWxzLmRheUluTWlsbGlzZWNvbmRzKTsgLy8gYWRkIDI0IGhvdXJzXG5cbiAgICBsZXQgZENvcnJlY3RlZCA9IG5ldyBEYXRlKFxuICAgICAgc3RhcnQudmFsdWVPZigpICsgc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwXG4gICAgKTtcbiAgICBsZXQgd2Vla0RheSA9IGRDb3JyZWN0ZWQuZ2V0RGF5KCk7XG4gICAgbGV0IGRpZmZXZWVrRGF5cyA9ICh3ZWVrRGF5IC0gMSkgKiBkYXlXaWR0aCAqIC0xO1xuXG4gICAgJGVsZW0gPSAkZWxlbSB8fCBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJiYWNrZ3JvdW5kLWdyaWRcIiB9KTtcbiAgICAkZWxlbS5zdHlsZVtcImJhY2tncm91bmQtcG9zaXRpb25cIl0gPVxuICAgICAgZGlmZldlZWtEYXlzICsgXCJweCAwLCAwIDAsIFwiICsgZGlmZldlZWtEYXlzICsgXCJweCAwXCI7XG4gICAgJGVsZW0uc3R5bGUud2lkdGggPSB3aWR0aCArIFwicHhcIjtcbiAgICAkZWxlbS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAxICsgXCJweFwiO1xuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBQbG90IENvbnRhaW5lciBWZXJ0aWNhbFxuICAgKiBMb3MgcGxvdHMgc29uIGVsZW1lbnRvcyBxdWUgYWdyZWdhbiBzZWNjaW9uZXMgZGUgZm9uZG8gZW4gbGEgcGxhbmlsbGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gcGxvdFZlcnRpY2FsQ29udGFpbmVyXG4gICAqL1xuICBjcmVhdGVQbG90VmVydGljYWxDb250YWluZXIoY29uZmlnKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcInBsb3QtdmVydGljYWwtY29udGFpbmVyXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3UGxvdFZlcnRpY2FsQ29udGFpbmVyKGNvbmZpZywgJGVsZW0pO1xuICB9LFxuXG4gIGNyZWF0ZVBsb3RIb3Jpem9udGFsQ29udGFpbmVyKGNvbmZpZykge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJwbG90LWhvcml6b250YWwtY29udGFpbmVyXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3UGxvdEhvcml6b250YWxDb250YWluZXIoY29uZmlnLCAkZWxlbSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBwbG90VmVydGljYWxDb250YWluZXIsIHVzYW5kbyBlbGVtZW50byBleGlzdGVudGVcbiAgICogdXNhIHVuIGVsZW1lbnRvIGV4aXN0ZW50ZSBwYXJhIHVzYXIgbGEgZnVuY2lvbiBwYXJhIHJlZGlidWphciBlbCBlbGVtZW50b1xuICAgKlxuICAgKiBMb3MgUGxvdHMgc2UgaW5zZXJ0YW4gY29tbyBkaXZzLCBjb24gcG9zaWNpb24gZXNwZWNpZmljYWRhLFxuICAgKiBjb24gYW5jaG8gZGUgZGlhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIHBsb3RWZXJ0aWNhbENvbnRhaW5lclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBwbG90VmVydGljYWxDb250YWluZXJcbiAgICovXG4gIHJlZHJhd1Bsb3RWZXJ0aWNhbENvbnRhaW5lcihjb25maWcsICRlbGVtKSB7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnBsb3RzICYmIGNvbmZpZy50aW1lbGluZS5wbG90cy52ZXJ0aWNhbCkge1xuICAgICAgbGV0IHsgaGVpZ2h0LCBkYXlXaWR0aCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG5cbiAgICAgIGNvbmZpZy50aW1lbGluZS5wbG90cy52ZXJ0aWNhbC5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIGxldCBkaWZmRGF5cyA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgZGF0ZVV0aWxzLmRpZmZEYXlzKGNvbmZpZy50aW1lbGluZS5zdGFydCwgcC5kYXRlKVxuICAgICAgICApO1xuICAgICAgICBsZXQgbGVmdCA9IGRpZmZEYXlzICogZGF5V2lkdGg7XG4gICAgICAgIGxldCBwbG90ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZXM6IFtcInBsb3QtdmVydGljYWxcIiwgcC5jbGFzc05hbWUgfHwgXCJcIl0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwibWFyZ2luLWxlZnRcIjogbGVmdCArIFwicHhcIixcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAkZWxlbS5hcHBlbmRDaGlsZChwbG90KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgcmVkcmF3UGxvdEhvcml6b250YWxDb250YWluZXIoY29uZmlnLCAkZWxlbSkge1xuICAgICRlbGVtLmlubmVySFRNTCA9IFwiXCI7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5wbG90cyAmJiBjb25maWcudGltZWxpbmUucGxvdHMuaG9yaXpvbnRhbCkge1xuICAgICAgbGV0IHsgd2lkdGgsIGl0ZW1IZWlnaHQgfSA9IHV0aWxzLmdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpO1xuICAgICAgY29uZmlnLnRpbWVsaW5lLnBsb3RzLmhvcml6b250YWwuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICBsZXQgaXRlbSA9IHV0aWxzLmdldEl0ZW1CeUlkKGNvbmZpZywgcC5pZE5vZGUsIHAudHlwZU5vZGUpO1xuICAgICAgICBsZXQgdG9wUG9zaXRpb24gPSB1dGlscy5nZXRQb3NpdGlvbkJ5SXRlbShjb25maWcsIGl0ZW0sIFwicGFyZW50XCIpO1xuICAgICAgICBsZXQgcGxvdCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgICBjbGFzc05hbWVzOiBbXCJwbG90LWhvcml6b250YWxcIiwgcC5jbGFzc05hbWUgfHwgXCJcIl0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwibWFyZ2luLXRvcFwiOiB0b3BQb3NpdGlvbiAqIGl0ZW1IZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgICRlbGVtLmFwcGVuZENoaWxkKHBsb3QpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBDb3JuZXIgSXpxdWllcmRvXG4gICAqIFNlIHVzYSBwYXJhIDpcbiAgICogICAgLSB0aXR1bG9zIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRhdG9zIGRlbCBzaWRlYmFyIGl6cXVpZXJkb1xuICAgKiAgICAtIHRpdHVsb3MgcGFyYSBpbnB1dHMgZGUgaGVhZGVyLCBhYnNvbHV0ZSBhIGxhIGRlcmVjaGFcbiAgICogICAgLSBib3RvbiBwYXJhIG1vc3RyYXIvb2N1bHRhciBzaWRlYmFyIGl6cXVpZXJkb1xuICAgKiAgICAtIHByb21lZGlvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXJcbiAgICovXG4gIGNyZWF0ZUNvcm5lcihjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb3JuZXJcIiB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdDb3JuZXIoJGVsZW0sIGNvbmZpZywgdGFiKTtcbiAgfSxcblxuICByZWRyYXdDb3JuZXIoJGVsZW0sIGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCBsYWJlbHNJbml0aWFsQ29ybmVyID0gY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmluaXRpYWwudmFyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHYpID0+XG4gICAgICAgICAgdi5vbmx5VGFiID09IHVuZGVmaW5lZCB8fCAodi5vbmx5VGFiICYmIHRhYiAmJiB2Lm9ubHlUYWIgPT0gdGFiLmtleSlcbiAgICAgIClcbiAgICAgIC5tYXAoKGQpID0+IGA8c3BhbiBjbGFzcz1cIml0ZW0tY29sXCI+JHtkLmxhYmVsfTwvc3Bhbj5gKVxuICAgICAgLmpvaW4oXCJcIik7XG5cbiAgICBsZXQgbGFiZWxzRXh0ZW5kQ29ybmVyID0gY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmV4dGVuZC52YXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAodikgPT5cbiAgICAgICAgICB2Lm9ubHlUYWIgPT0gdW5kZWZpbmVkIHx8ICh2Lm9ubHlUYWIgJiYgdGFiICYmIHYub25seVRhYiA9PSB0YWIua2V5KVxuICAgICAgKVxuICAgICAgLm1hcCgoZCkgPT4gYDxzcGFuIGNsYXNzPVwiaXRlbS1jb2xcIj4ke2QubGFiZWx9PC9zcGFuPmApXG4gICAgICAuam9pbihcIlwiKTtcblxuICAgIGxldCBsYWJlbHNIZWFkZXJFeHRlbmQgPSBjb25maWcudGltZWxpbmUuaGVhZGVyLmV4dGVuZC5kYXRhXG4gICAgICAubWFwKChkKSA9PiB7XG4gICAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm4gXCJcIjtcblxuICAgICAgICBsZXQgYXZnID0gXCJcIjtcbiAgICAgICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgbGV0IGlzQWNjZW50ID0gZC5pc0FjY2VudDtcblxuICAgICAgICBpZiAoZC5hdmVyYWdlKSB7XG4gICAgICAgICAgYXZnID0gYCA8c3BhbiBjbGFzcz1cImF2ZXJhZ2UgXCI+ICggPHNwYW4+IDxzcGFuIGNsYXNzPVwic3ltYm9sXCI+eMyEPC9zcGFuPiAke2QuYXZlcmFnZX0gPC9zcGFuPikgIDwvc3Bhbj4gICBgO1xuXG4gICAgICAgICAgdG9vbHRpcCA9IGBjYXAtdG9vbHRpcD1cIlByb21lZGlvICR7ZC5sYWJlbH0gOiAke2QuYXZlcmFnZX0gJHtcbiAgICAgICAgICAgIGQuc3VmZml4IHx8IFwiXCJcbiAgICAgICAgICB9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGQuY29sb3IpIHtcbiAgICAgICAgICBpZiAoaXNBY2NlbnQpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLWJhY2tncm91bmRcIiA6IFwiXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHQgXCIgOiBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImlucHV0LXRpdGxlLWNvbnRhaW5lciAke1xuICAgICAgICAgIGlzQWNjZW50ID8gXCJpbnB1dC10aXRsZS0tYWNjZW50XCIgOiBcIlwiXG4gICAgICAgIH0gJHtkLmlzUGVyc2lzdGVudCA/IFwicGVyc2lzdGVudFwiIDogXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAke3Rvb2x0aXB9IGNsYXNzPVwiaW5wdXQtdGl0bGUgJHtjbGFzc05hbWV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F2Z31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIlwiKTtcblxuICAgIGxldCB0b2dnbGVTaWRlYmFyQnRuU3RyaW5nID0gYFxuICAgICAgICAgIDxidXR0b24gdG9nZ2xlLXNpZGViYXIgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZCBjYXAtYnRuLXRvZ2dsZS1zaWRlYmFyIFwiPlxuICAgICAgICAgICR7aWNvbnMuY2hldnJvblJpZ2h0fVxuICAgICAgICAgIDwvYnV0dG9uPiBgO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5oaWRlVG9nZ2xlU2lkZWJhckJ1dHRvbikge1xuICAgICAgdG9nZ2xlU2lkZWJhckJ0blN0cmluZyA9IFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IHRlbXBsYXRlID0gYDxkaXY+XG5cbiAgICAgICAgICAke3RvZ2dsZVNpZGViYXJCdG5TdHJpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItdGl0bGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvdHRvbS10ZXh0XCI+XG4gICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5jb3JuZXIubGVmdC5sYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLWNvcm5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLWNvcm5lci10aXRsZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJib3R0b20tY29udGFpbmVyIGhpZGVcIj5cbiAgICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuY29ybmVyLmluaXRpYWwubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICR7bGFiZWxzSW5pdGlhbENvcm5lcn1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4dGVuZC1jb3JuZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXgtY29ybmVyLXRpdGxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvdHRvbS1jb250YWluZXIgaGlkZVwiPlxuICAgICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5jb3JuZXIuZXh0ZW5kLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm90dG9tLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAke2xhYmVsc0V4dGVuZENvcm5lcn1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1idG4tbmF2LWNvcm5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10aXRsZXNcIj5cbiAgICAgICAgICAgICAgJHtsYWJlbHNIZWFkZXJFeHRlbmR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLWxlZnQgaGlkZS1wcm9ncmVzc1wiPjwvZGl2PlxuXG4gICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHRlbXBsYXRlKTtcblxuICAgICRlbGVtLmlubmVySFRNTCA9IFwiXCI7XG4gICAgJGVsZW0uYXBwZW5kKHIpO1xuXG4gICAgbGV0IHRvZ2dsZVNpZGViYXIgPSAkZWxlbS5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1zaWRlYmFyXVwiKTtcbiAgICBpZiAodG9nZ2xlU2lkZWJhcikge1xuICAgICAgdG9nZ2xlU2lkZWJhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInRvZ2dsZVNpZGViYXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQ29ybmVyIERlcmVjaG9cbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIHRpdHVsb3MgcmVsYWNpb25hZG9zIGNvbiBsb3MgZGF0b3MgZGVsIHNpZGViYXIgRGVyZWNob1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBjb3JuZXJcbiAgICovXG4gIGNyZWF0ZUNvcm5lclJpZ2h0KGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lczogW1wiY29ybmVyXCIsIFwicmlnaHRcIl0gfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3Q29ybmVyUmlnaHQoJGVsZW0sIGNvbmZpZywgdGFiKTtcbiAgfSxcblxuICByZWRyYXdDb3JuZXJSaWdodCgkZWwsIGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCBsYWJlbCA9IFwiXCI7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5sYWJlbCkge1xuICAgICAgYCA8c3Bhbj5cbiAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5sYWJlbH1cbiAgICAgICAgICA8L3NwYW4+YDtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29ybmVyLXRpdGxlXCI+XG4gICAgICAgICR7bGFiZWx9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1yaWdodCBoaWRlLXByb2dyZXNzXCI+PC9kaXY+XG4gICAgYDtcbiAgICAkZWwuaW5uZXJIVE1MID0gc3RyLnRyaW0oKTtcbiAgICBsZXQgJGJ0bkNvbnRhaW5lciA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi1jb250YWluZXJcIik7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5idXR0b25zKSB7XG4gICAgICBjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmJ1dHRvbnMuZm9yRWFjaCgoYnRuKSA9PiB7XG4gICAgICAgIGxldCBpc0VuYWJsZWQgPSBidG4uZ2V0SXNFbmFibGVkID8gYnRuLmdldElzRW5hYmxlZCgpIDogdHJ1ZTtcbiAgICAgICAgaWYgKGlzRW5hYmxlZCkge1xuICAgICAgICAgIGxldCAkYnRuID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29ybmVyLWJ0biBjYXAtYnRuLXJhaXNlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke2J0bi5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IGApO1xuXG4gICAgICAgICAgaWYgKGJ0bi5vbkNsaWNrKSB7XG4gICAgICAgICAgICAkYnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBidG4ub25DbGljayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJGJ0bkNvbnRhaW5lci5hcHBlbmRDaGlsZCgkYnRuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmlucHV0cykge1xuICAgICAgY29uZmlnLnRpbWVsaW5lLmNvcm5lci5yaWdodC5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgbGV0ICRpbnB1dCA9IHRoaXMuY3JlYXRlQ29ybmVyUmlnaHRJbnB1dCh7IGlucHV0Q29uZmlnOiBpbnB1dCB9KTtcbiAgICAgICAgJGJ0bkNvbnRhaW5lci5hcHBlbmRDaGlsZCgkYnRuKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJGVsO1xuICB9LFxuXG4gIGNyZWF0ZUNvcm5lclJpZ2h0SW5wdXQoeyBpbnB1dENvbmZpZywgZGF0YURheSA9IG51bGwsIGRheVNlbGVjdGVkID0gbnVsbCB9KSB7XG4gICAgbGV0IHIgPSBudWxsO1xuICAgIHN3aXRjaCAoaW5wdXRDb25maWcudHlwZSkge1xuICAgICAgY2FzZSBcImF1dG9jb21wbGV0ZS1jcnVkXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUNvcm5lclJpZ2h0SW5wdXRBdXRvY29tcGxldGVDcnVkKHtcbiAgICAgICAgICBpbnB1dENvbmZpZyxcbiAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9LFxuXG4gIGNyZWF0ZUNvcm5lclJpZ2h0SW5wdXRBdXRvY29tcGxldGVDcnVkKHtcbiAgICBpbnB1dENvbmZpZyxcbiAgICBkYXRhRGF5LFxuICAgIGRheVNlbGVjdGVkLFxuICB9KSB7XG4gICAgbGV0IGVsZW0gPSBcInRlc3RcIjtcbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIZWFkZXIgVG9wXG4gICAqIFNlIHVzYSBwYXJhIDpcbiAgICogICAgLSBNYW5lam8gZGUgdGFic1xuICAgKiAgICAtIEJvdG9uZXMgZGUgbmF2ZWdhY2nDs24geSBzZWxlY2Npw7NuIGRlIGZlY2hhXG4gICAqICAgIC0gQm90b24gdG9nZ2xlIERhcmsgbW9kZVxuICAgKiAgICAtIEJvdG9uIHRvZ2dsZSBIZWFkZXIgZXh0ZW5kZWRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb21cbiAgICovXG5cbiAgY3JlYXRlSGVhZGVyVG9wKGNvbmZpZywgdGFiU2VsZWN0ZWQgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3SGVhZGVyVG9wKGNvbmZpZywgdGFiU2VsZWN0ZWQsIGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgfSxcblxuICByZWRyYXdIZWFkZXJUb3AoY29uZmlnLCB0YWJTZWxlY3RlZCA9IG51bGwsICRlbGVtKSB7XG4gICAgbGV0IHN0ciA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdG9wXCI+YDtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUudGFicykge1xuICAgICAgbGV0IHNob3dUYWJzID0gdHJ1ZTtcblxuICAgICAgaWYgKGNvbmZpZy50aW1lbGluZS50YWJzLmZpbHRlcigodCkgPT4gIXQuaXNIaWRkZW4pLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHNob3dUYWJzID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG93VGFicykge1xuICAgICAgICBjb25zdCBmb3JjZU1vYmlsZSA9IGNvbmZpZy50aW1lbGluZSAmJiBjb25maWcudGltZWxpbmUuZm9yY2VNb2JpbGUgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IHRhYlNlbGVjdENsYXNzZXMgPSBmb3JjZU1vYmlsZVxuICAgICAgICAgID8gXCJ0YWItc2VsZWN0LWNvbnRhaW5lciBjLWQtbW9iaWxlLWZsZXhcIlxuICAgICAgICAgIDogXCJ0YWItc2VsZWN0LWNvbnRhaW5lciBjLWQtZGVza3RvcC1ub25lIGMtZC1tb2JpbGUtZmxleFwiO1xuICAgICAgICBjb25zdCB0YWJzQ29udGFpbmVyQ2xhc3NlcyA9IGZvcmNlTW9iaWxlXG4gICAgICAgICAgPyBcInRhYnMtY29udGFpbmVyIGMtZC1tb2JpbGUtbm9uZVwiXG4gICAgICAgICAgOiBcInRhYnMtY29udGFpbmVyIGMtZC1kZXNrdG9wLWZsZXggYy1kLW1vYmlsZS1ub25lXCI7XG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCIke3RhYlNlbGVjdENsYXNzZXN9XCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwidGFicy1zZWxlY3RcIiA+YDtcblxuICAgICAgICBjb25maWcudGltZWxpbmUudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICBpZiAoIXRhYi5pc0hpZGRlbikge1xuICAgICAgICAgICAgc3RyICs9IGAgPG9wdGlvbiAke1xuICAgICAgICAgICAgICB0YWIgPT0gdGFiU2VsZWN0ZWQgPyAnc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6IFwiXCJcbiAgICAgICAgICAgIH0gdmFsdWU9XCIke3RhYi5pZH1cIj4gJHt0YWIubGFiZWx9IDwvb3B0aW9uPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdHIgKz0gYDwvc2VsZWN0PiA8L2Rpdj5gO1xuXG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCIke3RhYnNDb250YWluZXJDbGFzc2VzfVwiPmA7XG5cbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCF0YWIuaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHN0ciArPSBgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFiICR7dGFiLmRpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn0gICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhYiA9PSB0YWJTZWxlY3RlZCA/IFwiYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAke3RhYi5jb2xvcn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCIke3RhYi5jb2xvcn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt0YWIuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhYi50b29sdGlwID8gJ2NhcC10b29sdGlwPVwiJyArIHRhYi50b29sdGlwICsgJ1wiJyA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ke3RhYi5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICR7dGFiLmljb24gfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGFiU2VsZWN0ZWQpIHtcbiAgICAgIGlmICh0YWJTZWxlY3RlZC5sZWdlbmRzKSB7XG4gICAgICAgIHN0ciArPSBgIFxuICAgICAgICA8YnV0dG9uIHRvZ2dsZS1sZWdlbmRzIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWQgXCI+XG4gICAgICAgICAgJHtpY29ucy50b2dnbGVMZWdlbmRzfVxuICAgICAgICA8L2J1dHRvbj4gXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZHMtY29udGFpbmVyIGZvcmNlLW1vYmlsZS1zdHlsZSBoaWRlXCI+IGA7XG5cbiAgICAgICAgdGFiU2VsZWN0ZWQubGVnZW5kcy5mb3JFYWNoKChsZWdlbmQpID0+IHtcbiAgICAgICAgICBsZXQgY29sb3JDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNvbG9yQmcgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IobGVnZW5kLmNvbG9yKSkge1xuICAgICAgICAgICAgY29sb3JCZyA9IFwiYmFja2dyb3VuZDpcIiArIGxlZ2VuZC5jb2xvcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sb3JDbGFzcyA9IGxlZ2VuZC5jb2xvciA/IGxlZ2VuZC5jb2xvciArIFwiLS1iYWNrZ3JvdW5kXCIgOiBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxlZ2VuZCAke2xlZ2VuZC5hY3RpdmUgPyBcImFjdGl2ZVwiIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7bGVnZW5kLmtleX1cIlxuICAgICAgICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQudG9vbHRpcCA/IGBjYXAtdG9vbHRpcD1cIiR7bGVnZW5kLnRvb2x0aXB9XCJgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgIH0gPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tbGVnZW5kICR7Y29sb3JDbGFzc30gJHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnNoYXBlXG4gICAgICAgICAgICAgICAgICB9XCIgc3R5bGU9XCIke2NvbG9yQmd9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4ke2xlZ2VuZC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyICs9IGA8L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0ciArPSBgXG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG5cblxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLXByZXYgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZCBjLWQtbW9iaWxlLW5vbmVcIj5cbiAgICAgICAgICAgICAke2ljb25zLmFycm93TGVmdH1cbiAgICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufSBcbiAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLWNhbGVuZGFyIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgICR7aWNvbnMuY2FsZW5kYXJ9XG4gICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLW5leHQgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZCBjLWQtbW9iaWxlLW5vbmVcIj5cbiAgICAgICAgICAgICR7aWNvbnMuYXJyb3dSaWdodH1cbiAgICAgICAgICAgICR7aWNvbnMubG9hZGluZ0ljb259XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uIHRvZ2dsZS1kYXJrIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taGVhZGVyIGMtZC1tb2JpbGUtbm9uZSAke1xuICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLndpdGhEYXJrVG9nZ2xlID09IGZhbHNlID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfVwiPlxuICAgICAgICAgICAgJHtpY29ucy5kYXJrfVxuICAgICAgICAgICAgJHtpY29ucy5saWdodH1cbiAgICAgICAgICA8L2J1dHRvbj5gO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgICBzdHIgKz0gYDxidXR0b24gdG9nZ2xlLWhlYWRlciBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkXCI+XG4gICAgICAgICAgJHtpY29ucy5jaGV2cm9uRG93bn1cbiAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgIH1cblxuICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCJidXR0b24tcmlnaHQtY29udGFpbmVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgLypcbiAgICAgICAgICBgXG4gICAgICAgICAgPGJ1dHRvbiB0b2dnbGUtc2lkZWJhci1yaWdodCBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkXCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cIndpZHRoOjI0cHg7aGVpZ2h0OjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xNS40MSwxNi41OEwxMC44MywxMkwxNS40MSw3LjQxTDE0LDZMOCwxMkwxNCwxOEwxNS40MSwxNi41OFpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICAqL1xuXG4gICAgbGV0ICRyID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgICRlbGVtLnJlcGxhY2VXaXRoKCRyKTtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUuaGVhZGVyLnJpZ2h0QnV0dG9ucykge1xuICAgICAgbGV0ICRidXR0b25Db250YWluZXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbi1yaWdodC1jb250YWluZXJcIik7XG4gICAgICBjb25maWcudGltZWxpbmUuaGVhZGVyLnJpZ2h0QnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ2xhc3MgPSBidXR0b24uY3VzdG9tQ2xhc3MgfHwgXCJcIjtcbiAgICAgICAgbGV0IGhhc0JhZGdlID0gZmFsc2U7XG4gICAgICAgIGlmIChidXR0b24uaGFzQmFkZ2UpIHtcbiAgICAgICAgICBoYXNCYWRnZSA9IGJ1dHRvbi5oYXNCYWRnZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHIgPSBgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkICR7XG4gICAgICAgICAgaGFzQmFkZ2UgPyBcImNhcC1idG4taGFzLWJhZGdlXCIgOiBcIlwiXG4gICAgICAgIH0gJHtjdXN0b21DbGFzc31cIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiJHtidXR0b24uaWNvbn1cIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICBsZXQgJGJ1dHRvbiA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICAgICAgJGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dCkgPT4gYnV0dG9uLm9uQ2xpY2soeyBldnQgfSkpO1xuICAgICAgICAkYnV0dG9uQ29udGFpbmVyLmFwcGVuZCgkYnV0dG9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCAkdG9nZ2xlRGFyayA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCJbdG9nZ2xlLWRhcmtdXCIpO1xuICAgIGlmICgkdG9nZ2xlRGFyaykge1xuICAgICAgJHRvZ2dsZURhcmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwidG9nZ2xlRGFya1wiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCAkYnRuQ2FsZW5kYXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiW2NhcC1idG4tY2FsZW5kYXJdXCIpO1xuICAgIGlmICgkYnRuQ2FsZW5kYXIpIHtcbiAgICAgICRidG5DYWxlbmRhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHggPSBlLng7XG4gICAgICAgIGxldCB5ID0gZS55O1xuICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrQ2FsZW5kYXJJY29uXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDogeyB4LCB5IH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCAkYnRuVG9nZ2xlSGVhZGVyID0gJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtaGVhZGVyXVwiKTtcbiAgICBpZiAoJGJ0blRvZ2dsZUhlYWRlcikge1xuICAgICAgJGJ0blRvZ2dsZUhlYWRlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJ0b2dnbGVIZWFkZXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKlxuICAgICRyLnF1ZXJ5U2VsZWN0b3IoXCJbdG9nZ2xlLXNpZGViYXItcmlnaHRdXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBlID0+IHtcbiAgICAgICRyLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwidG9nZ2xlU2lkZWJhclJpZ2h0XCIsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICB9KSk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgICRyLnF1ZXJ5U2VsZWN0b3IoXCJbY2FwLWJ0bi1wcmV2XVwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImhlYWRlclByZXZcIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICRyLnF1ZXJ5U2VsZWN0b3IoXCJbY2FwLWJ0bi1jYWxlbmRhcl1cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJoZWFkZXJDYWxlbmRhclwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIltjYXAtYnRuLW5leHRdXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiaGVhZGVyTmV4dFwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgbGV0ICR0b2dnbGVMZWdlbmRzQnRuID0gJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtbGVnZW5kc11cIik7XG4gICAgaWYgKCR0b2dnbGVMZWdlbmRzQnRuKSB7XG4gICAgICAkdG9nZ2xlTGVnZW5kc0J0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0ICRsZWdlbmRDb250YWluZXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiLmxlZ2VuZHMtY29udGFpbmVyXCIpO1xuICAgICAgICBpZiAoJGxlZ2VuZENvbnRhaW5lcikge1xuICAgICAgICAgICRsZWdlbmRDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImhpZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgICRyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubGVnZW5kXCIpLmZvckVhY2goKCRsZWdlbmQpID0+IHtcbiAgICAgICRsZWdlbmQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBsZXQgbGVnZW5kU2VsZWN0ZWQgPSB0YWJTZWxlY3RlZC5sZWdlbmRzLmZpbmQoXG4gICAgICAgICAgICAodGFiKSA9PiB0YWIua2V5ID09PSBrZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChsZWdlbmRTZWxlY3RlZCkge1xuICAgICAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0TGVnZW5kSGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgbGVnZW5kOiBsZWdlbmRTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICRsZWdlbmQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiOm5vdCguZGlzYWJsZWQpXCIpLmZvckVhY2goKCR0YWIpID0+IHtcbiAgICAgICR0YWIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBsZXQgdGFiU2VsZWN0ZWQgPSBjb25maWcudGltZWxpbmUudGFicy5maW5kKCh0YWIpID0+IHRhYi5pZCA9PSBrZXkpO1xuICAgICAgICAgIGlmICh0YWJTZWxlY3RlZCkge1xuICAgICAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0VGFiSGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgdGFiOiB0YWJTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvckFsbChcIi50YWJzLXNlbGVjdDpub3QoLmRpc2FibGVkKVwiKS5mb3JFYWNoKCgkdGFiKSA9PiB7XG4gICAgICAkdGFiLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IHBhcnNlRmxvYXQoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcblxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgbGV0IHRhYlNlbGVjdGVkID0gY29uZmlnLnRpbWVsaW5lLnRhYnMuZmluZCgodGFiKSA9PiB0YWIuaWQgPT0ga2V5KTtcbiAgICAgICAgICBpZiAodGFiU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNlbGVjdFRhYkhlYWRlclwiLCB7XG4gICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgIHRhYjogdGFiU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkcjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIZWFkZXJcbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIE1vc3RyYXIgZmVjaGFzIGVuIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbVxuICAgKi9cbiAgY3JlYXRlSGVhZGVyKGNvbmZpZykge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiaGVhZGVyXCIpO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd0hlYWRlcihjb25maWcsICRlbGVtKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIEhlYWRlciwgdXNhZG8gcGFyYSByZWRpYnVqYXJcbiAgICogdXRpbGl6YSAkZWxlbSBjb21vIGVsZW1lbnRvIGRvbSBkb25kZSByZWNyZWFybG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gRG9tIGRvbmRlIGNyZWEgSGVhZGVyXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tXG4gICAqL1xuICByZWRyYXdIZWFkZXIoY29uZmlnLCAkZWxlbSkge1xuICAgIGxldCBkYXRlc1RyZWUgPSBkYXRlVXRpbHMuZ2V0RGF0ZVRyZWVSYW5nZShcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5zdGFydCksXG4gICAgICBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKVxuICAgICk7XG5cbiAgICBsZXQgc3RyID0gYDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+IGA7XG5cbiAgICBPYmplY3Qua2V5cyhkYXRlc1RyZWUpLmZvckVhY2goKGtleVkpID0+IHtcbiAgICAgIGxldCB5ZWFyID0gZGF0ZXNUcmVlW2tleVldO1xuICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiYWduby1jYWxlbmRhcmlvXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWdubyBoaWRlXCI+JHtrZXlZfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc2VzXCI+YDtcblxuICAgICAgT2JqZWN0LmtleXMoeWVhcikuZm9yRWFjaCgoa2V5TSkgPT4ge1xuICAgICAgICBsZXQgbW9udGggPSBkYXRlc1RyZWVba2V5WV1ba2V5TV07XG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCJtZXMtY2FsZW5kYXJpb1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzICR7XG4gICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobW9udGgpLmxlbmd0aCA8IDRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJtZXMtcmVkdWNlZCBtZXMtcmVkdWNlZC1cIiArIE9iamVjdC5rZXlzKG1vbnRoKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt1dGlscy5nZXRNb250aEJ5UG9zaXRpb24oa2V5TSl9ICR7a2V5WX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFzXCI+YDtcbiAgICAgICAgT2JqZWN0LmtleXMobW9udGgpLmZvckVhY2goKGtleUQpID0+IHtcbiAgICAgICAgICBsZXQgZGF5ID0gZGF0ZXNUcmVlW2tleVldW2tleU1dW2tleURdO1xuICAgICAgICAgIGxldCBpc1dlZWtlbmQgPSBkYXkuaXNXZWVrZW5kO1xuICAgICAgICAgIGxldCBpc1RvZGF5ID0gZGF5LmlzVG9kYXk7XG4gICAgICAgICAgbGV0IGhhc0FsZXJ0ID0gY29uZmlnLnRpbWVsaW5lLmhlYWRlci5kYXRlSGFzQWxlcnRcbiAgICAgICAgICAgID8gY29uZmlnLnRpbWVsaW5lLmhlYWRlci5kYXRlSGFzQWxlcnQoZGF5KVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICBsZXQgZGF0ZSA9IGRhdGVVdGlscy5mb3JtYXREYXRlKGRheS5kYXRlKTtcbiAgICAgICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJkaWEtY2FsZW5kYXJpbyBcbiAgICAgICAgICAgICR7aXNUb2RheSA/IFwidG9kYXlcIiA6IFwiXCJ9XG4gICAgICAgICAgICAke2lzV2Vla2VuZCA/IFwid2Vla2VuZFwiIDogXCJcIn1cbiAgICAgICAgICAgICR7aGFzQWxlcnQgPyBcImhhcy1hbGVydFwiIDogXCJcIn1cbiAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmRhdGVTZWxlY3RhYmxlID8gXCJpcy1jbGlja2VhYmxlXCIgOiBcIlwifVxuICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuZGF0ZVdpdGhDb250ZXh0TWVudSA/IFwiaXMtY2xpY2tlYWJsZVwiIDogXCJcIn1cbiAgICAgICAgICAgIFwiIGRhdGU9XCIke2RhdGV9XCI+JHtrZXlEfTwvZGl2PmA7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHIgKz0gYDwvZGl2PjwvZGl2PmA7XG4gICAgICB9KTtcbiAgICAgIHN0ciArPSBgPC9kaXY+IDwvZGl2PmA7XG4gICAgfSk7XG5cbiAgICBzdHIgKz0gYDwvZGl2PmA7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICAkZWxlbS5hcHBlbmQoZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpKTtcblxuICAgIGxldCAkZGF5cyA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGlhLWNhbGVuZGFyaW9bZGF0ZV1cIik7XG4gICAgJGRheXMuZm9yRWFjaCgoJGRpYSkgPT4ge1xuICAgICAgaWYgKGNvbmZpZy50aW1lbGluZS5kYXRlV2l0aENvbnRleHRNZW51KSB7XG4gICAgICAgICRkaWEuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIChldnQpID0+IHtcbiAgICAgICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY29udGV4dE1lbnVEYXRlXCIsIHtcbiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICRlbGVtOiAkZGlhLFxuICAgICAgICAgICAgICAgIGRhdGU6ICRkaWEuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKSxcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICBjbGllbnRZOiBldnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmRhdGVTZWxlY3RhYmxlKSB7XG4gICAgICAgICRkaWEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldnQpID0+IHtcbiAgICAgICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tEYXRlXCIsIHtcbiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICRlbGVtOiAkZGlhLFxuICAgICAgICAgICAgICAgIGRhdGU6ICRkaWEuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLm9uTW91c2VPdmVyRGF0ZSkge1xuICAgICAgICAkZGlhLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5vbk1vdXNlT3ZlckRhdGUoe1xuICAgICAgICAgICAgJGRpYSxcbiAgICAgICAgICAgICRlbGVtLFxuICAgICAgICAgICAgZGF0ZTogJGRpYS5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpLFxuICAgICAgICAgICAgZXZ0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcudGltZWxpbmUub25Nb3VzZU91dERhdGUpIHtcbiAgICAgICAgJGRpYS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5vbk1vdXNlT3V0RGF0ZSh7XG4gICAgICAgICAgICAkZGlhLFxuICAgICAgICAgICAgJGVsZW0sXG4gICAgICAgICAgICBkYXRlOiAkZGlhLmdldEF0dHJpYnV0ZShcImRhdGVcIiksXG4gICAgICAgICAgICBldnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEhlYWRlciBleHRlbmRlZFxuICAgKiBTZSB1c2EgcGFyYSA6XG4gICAqICAgIC1Nb3N0cmFyIGlucHV0cyB5IGRhdG9zIHBhcmEgZmVjaGFzIGVuIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBoZWFkZXJFeHRlbmRlZFxuICAgKi9cbiAgY3JlYXRlSGVhZGVyRXh0ZW5kZWQoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmVuYWJsZWQgPT0gZmFsc2UpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGRhdGVzID0gZGF0ZVV0aWxzLmdldERhdGVSYW5nZShcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5zdGFydCksXG4gICAgICBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKVxuICAgICk7XG4gICAgbGV0IHN0ciA9IGA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZFwiPmA7XG5cbiAgICBjb25maWcudGltZWxpbmUuaGVhZGVyLmV4dGVuZC5kYXRhLmZvckVhY2goKGQsIGRfaW5kZXgpID0+IHtcbiAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm4gXCJcIjtcblxuICAgICAgbGV0IGlzUGVyc2lzdGVudCA9IGQuaXNQZXJzaXN0ZW50O1xuICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiaW5wdXQtbGlzdCAke2lzUGVyc2lzdGVudCA/IFwicGVyc2lzdGVudFwiIDogXCJcIn1cIj5gO1xuICAgICAgc3RyICs9IGRhdGVzXG4gICAgICAgIC5tYXAoKGRhdGUpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgIGxldCBpc0Z1dHVyZSA9IGRhdGVVdGlscy5pc0Z1dHVyZShkYXRlKTtcbiAgICAgICAgICBsZXQgaXNUb2RheSA9IGRhdGVVdGlscy5pc1RvZGF5KGRhdGUpO1xuXG4gICAgICAgICAgaWYgKGQuZGF0YSkge1xuICAgICAgICAgICAgbGV0IGRhdGFGb3VuZGVkID0gZC5kYXRhLmZpbmQoKGRhdGFJbnB1dCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZGF0ZVV0aWxzLmlzU2FtZURhdGUoXG4gICAgICAgICAgICAgICAgbmV3IERhdGUoZGF0YUlucHV0LmRhdGUgKyBcIlQwMDowMDowMFwiKSxcbiAgICAgICAgICAgICAgICBkYXRlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkYXRhRm91bmRlZCkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFGb3VuZGVkLnZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBkYXRhRm91bmRlZC5jbGFzc05hbWUgKyBcIiBcIiB8fCBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGQuZWRpdGFibGUgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAoaXNGdXR1cmUgJiYgZC5lZGl0YWJsZUZ1dHVyZSA9PSBmYWxzZSkgfHxcbiAgICAgICAgICAgIChpc1RvZGF5ICYmIGQuZWRpdGFibGVUb2RheSA9PSBmYWxzZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRlPVwiJHtkYXRlVXRpbHMuZm9ybWF0RGF0ZShkYXRlKX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD1cIiR7ZF9pbmRleH1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiAke2NsYXNzTmFtZX0gJHtkYXRlLnZhck5hbWUgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmVkaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZGlhLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICBkYXRlPVwiJHtkYXRlVXRpbHMuZm9ybWF0RGF0ZShkYXRlKX1cIiBcbiAgICAgICAgICAgICAgICAgIGluZGV4PVwiJHtkX2luZGV4fVwiIFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItaW5wdXQgXG4gICAgICAgICAgICAgICAgICAke2RhdGUudmFyTmFtZX0gJHtkLmNvbG9yID8gXCJjLVwiICsgZC5jb2xvciArIFwiLS10ZXh0XCIgOiBcIlwifVwiIFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifSBcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHt2YWx1ZX1cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICB9KTtcblxuICAgIHN0ciArPSBgPC9kaXY+YDtcblxuICAgIGxldCByID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuXG4gICAgci5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXQuaGVhZGVyLWlucHV0XCIpLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGRhdGUgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKTtcbiAgICAgICAgbGV0IGluZGV4ID0gZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZShcImluZGV4XCIpO1xuICAgICAgICBsZXQgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgICAgIGxldCB0eXBlRGF0YSA9IGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmRhdGFbaW5kZXhdO1xuXG4gICAgICAgIC8vcmVmcmVzaCBjb25maWcgdmFsdWVcbiAgICAgICAgbGV0IGRhdGEgPSB0eXBlRGF0YS5kYXRhLmZpbmQoKGQpID0+XG4gICAgICAgICAgZGF0ZVV0aWxzLmlzU2FtZURhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShkLmRhdGUgKyBcIlQwMDowMDowMFwiKSxcbiAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUgKyBcIlQwMDowMDowMFwiKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHlwZURhdGEuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2hhbmdlSW5wdXRIZWFkZXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICAgIHR5cGVEYXRhOiB0eXBlRGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXIgU2lkZWJhciBJenF1aWVyZG9cbiAgICogICAgLSBNYW5lamEgaXRlbXMgY29tbyBhcmJvbCBkZSAyIG5pdmVsZXMgKHBhcmVudCwgY2hpbGRyZW4pXG4gICAqICAgIC0gRWwgc2lkZWJhciBzZSBkaXZpZGUgZW4gbmF2TGlzdCAtIEluaXRpYWxOYXYgLSBleHRlbmRlZE5hdiAtIEJ0bk5hdlxuICAgKiAgICAtIFNlIGFncmVnYSBpdGVtRGV0YWlsLCBwYXJhIGRldGFsbGVzIGRlIGl0ZW1zXG4gICAqXG4gICAqXG4gICAqIFRPRE86IHBhcmEgZXZpdGFyIGluY3J1c3RhciBsYXMgaWRzIGVuIGxvcyBpbnB1dHMsIHNlIGRlYmVuIGNyZWFyXG4gICAqIGxvcyBub2RvcyB1bm8gcG9yIHVubyBjb21vIGVsZW1lbnRvIERPTSwgeSBhZ3JlZ2FybGVzIGxvcyBldmVudG9zIGRpcmVjdGFtZW50ZVxuICAgKiBhaG9yYSBzZSBoYWNlIHNlbGVjY2lvbmFuZG8gdG9kb3MgbG9zIGlucHV0cyBjb24gcXVlcnlTZWxlY3RvckFsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBTaWRlYmFyIEl6cXVpZXJkb1xuICAgKi9cbiAgY3JlYXRlTmF2TGVmdChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJsZWZ0XCIgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBpenF1aWVyZG8sIHVzYWRvIHBhcmEgcmVkaWJ1amFyXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgaXpxdWllcmRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIG5hdkxlZnRcbiAgICovXG5cbiAgcmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IG5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpbml0aWFsTmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGV4TmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGJ0bk5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIGlzRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbmZpZy5kYXRhLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGhhc0J0biA9ICEhZC5vbkNsaWNrRGV0YWlsQnV0dG9uO1xuICAgICAgY29uc3QgaXNNb2JpbGUgPSB1dGlscy5jaGVja0lzTW9iaWxlKGNvbmZpZyk7XG4gICAgICBjb25zdCBoYXNDbGlja0xhYmVsVG9EZXRhaWwgPVxuICAgICAgICAhIWQub25DbGlja0RldGFpbEJ1dHRvbiAmJiAhIWQuY2xpY2tMYWJlbFRvRGV0YWlsO1xuICAgICAgLy8gZW4gbW9iaWxlIGNvbiBjbGlja0xhYmVsVG9EZXRhaWw6IG5vIG1vc3RyYXIgYm90w7NuLCBlbCBub21icmUgZXMgY2xpY2tlYWJsZVxuICAgICAgY29uc3Qgc2hvd0RldGFpbEJ0biA9IGhhc0J0biAmJiAhKGlzTW9iaWxlICYmIGhhc0NsaWNrTGFiZWxUb0RldGFpbCk7XG4gICAgICBjb25zdCBkZXRhaWxCdG5Db250ZW50ID1cbiAgICAgICAgc2hvd0RldGFpbEJ0biAmJiBpc01vYmlsZVxuICAgICAgICAgID8gKGQuaWNvbkRldGFpbEJ1dHRvbiB8fCBpY29ucy5pbmZvT3V0bGluZSlcbiAgICAgICAgICA6IHNob3dEZXRhaWxCdG5cbiAgICAgICAgICAgID8gKGQubGFiZWxEZXRhaWxCdXR0b24gfHwgXCJcIilcbiAgICAgICAgICAgIDogXCJcIjtcbiAgICAgIGNvbnN0IGRldGFpbEJ0biA9IHNob3dEZXRhaWxCdG5cbiAgICAgICAgPyBgPGJ1dHRvbiBjbGFzcz1cImRldGFpbC1idG4gJHtpc01vYmlsZSA/IFwiZGV0YWlsLWJ0bi1pY29uXCIgOiBcIlwifVwiIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCIgdHlwZS1ub2RlPVwiJHtcbiAgICAgICAgICAgIGQudHlwZSB8fCBcIlwiXG4gICAgICAgICAgfVwiICR7aXNNb2JpbGUgJiYgZC5sYWJlbERldGFpbEJ1dHRvbiA/IGB0aXRsZT1cIiR7ZC5sYWJlbERldGFpbEJ1dHRvbi5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKX1cImAgOiBcIlwifT5cbiAgICAgICAgJHtkZXRhaWxCdG5Db250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gXG4gICAgICAgIDogXCJcIjtcblxuICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtXCI+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tY29udGFpbmVyIHBhcmVudFwiPmA7XG5cbiAgICAgIGlmIChkLmNoaWxkcmVuKSB7XG4gICAgICAgIG5hdkxpc3QgKz0gYDxidXR0b24gY2xhc3M9XCJ0cmVlLWljb24gJHtcbiAgICAgICAgICBkLmlzQ2xvc2VkID8gXCJcIiA6IFwiY2FwLXJvdGF0ZVwiXG4gICAgICAgIH1cIiBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCIgPlxuICAgICAgICAke2ljb25zLmNoZXZyb25Eb3dufVxuICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgfVxuXG4gICAgICBuYXZMaXN0ICs9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZSB0cnVuY2F0ZSBmdWxsLXdpZHRoICR7XG4gICAgICAgICAgICBkLmNsaWNrZWFibGUgfHwgaGFzQ2xpY2tMYWJlbFRvRGV0YWlsID8gXCJjbGlja2VhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgfSAke2hhc0NsaWNrTGFiZWxUb0RldGFpbCA/IFwiY2xpY2stbGFiZWwtdG8tZGV0YWlsXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICR7ZC5uYXZPdmVyID8gXCJob3ZlcmFibGVcIiA6IFwiXCJ9IFwiIGl0ZW0taWQ9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCB8fCAtMVxuICAgICAgICAgICAgICAgICAgICAgIH1cIiB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgJHtkLmxhYmVsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLWJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgJHtkZXRhaWxCdG59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZHJlbi1pdGVtcyAke1xuICAgICAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICAgICAgfSBcIiBjaGlsZC1saXN0PVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIGxldCBsaWdodENvbG9yID0gbnVsbDtcbiAgICAgICAgICBsZXQgbGlnaHRDbGFzcyA9IG51bGw7XG4gICAgICAgICAgbGV0IGxpZ2h0U3BhbiA9IFwiXCI7XG4gICAgICAgICAgbGV0IG11bHRpQnV0dG9uc0RldGFpbFRtcGwgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGMubGlnaHQpKSB7XG4gICAgICAgICAgICAgIGxpZ2h0Q29sb3IgPSBjLmxpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGlnaHRDbGFzcyA9IGMubGlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGxpZ2h0U3BhbiA9IGA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWdodCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0Q2xhc3MgPyBsaWdodENsYXNzICsgXCItbGlnaHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRDb2xvciA/IFwiLS1saWdodC1jb2xvcjpcIiArIGxpZ2h0Q29sb3IgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjLmhhc011bHRpYnV0dG9ucykge1xuICAgICAgICAgICAgbGV0IGljb25Gb3JtYXR0ZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMgJiZcbiAgICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmluaXRpYWwubXVsdGlidXR0b25zLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpY29uRm9ybWF0dGVyID1cbiAgICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMuaWNvbkZvcm1hdHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gaWNvbkZvcm1hdHRlclxuICAgICAgICAgICAgICA/IGljb25Gb3JtYXR0ZXIoeyBpdGVtOiBjLCBjb25maWcgfSlcbiAgICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgICAgICBtdWx0aUJ1dHRvbnNEZXRhaWxUbXBsID0gYDxidXR0b24gY2xhc3M9XCJtdWx0aWJ1dHRvbnMtYnRuXCIgXG4gICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCIgXG4gICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9PlxuICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH0gXG4gICAgICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkLW5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1pdGVtLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTksMTVMMTMsMjFMMTEuNTgsMTkuNThMMTUuMTcsMTZINFY0SDZWMTRIMTUuMTdMMTEuNTgsMTAuNDJMMTMsOUwxOSwxNVpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAke2xpZ2h0U3Bhbn1cbiAgICAgICAgICAgICAgICAgICAgJHttdWx0aUJ1dHRvbnNEZXRhaWxUbXBsfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS10aXRsZSAke2MuY2xpY2tlYWJsZSA/IFwiY2xpY2tlYWJsZVwiIDogXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMubmF2T3ZlciA/IFwiaG92ZXJhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtjLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBuYXZMaXN0ICs9IGA8L2Rpdj5gO1xuXG4gICAgICAvL2luaXRpYWxcbiAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aE5hdikge1xuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZC52YWx1ZXMsIHYudmFyTmFtZSk7XG5cbiAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLnJvdW5kKHZhbHVlLCB2LnJvdW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICBjYXNlIFwiaG91clwiOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgIGxldCBoaFZhbHVlID0gdmFsdWVbMF07XG4gICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaW5pdGlhbE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gJHtcbiAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9XCIgY2hpbGQ9XCIke2QuaWQgfHwgLTF9XCI+YDtcblxuICAgICAgICAgIGlmIChjLndpdGhOYXYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGhWYWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vRXh0XG4gICAgICBleE5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJleC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aEV4TmF2KSB7XG4gICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5leHRlbmQudmFycy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGQudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgIGlmICh2LnJvdW5kICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdXRpbHMucm91bmQodmFsdWUsIHYucm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgc3dpdGNoICh2LmlucHV0KSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2hoVmFsdWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtkLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7bW1WYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICBkLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICBpZiAoYy5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgICAgIGV4TmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWV4LW5hdi1pdGVtICR7XG4gICAgICAgICAgICBkLmlzQ2xvc2VkID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfVwiIGNoaWxkPVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmV4dGVuZC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImhvdXJcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlLnNwbGl0KFwiOlwiKSA6IFswLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG91ci1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7aGhWYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI1OVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy9idXR0b25zXG4gICAgICBidG5OYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbSBwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnRcIj5gO1xuICAgICAgaWYgKFxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucyAmJlxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICApIHtcbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmJ1dHRvbnMudmFycy5mb3JFYWNoKChidG4pID0+IHtcbiAgICAgICAgICBpZiAoZC53aXRoQnRuTmF2KSB7XG4gICAgICAgICAgICBsZXQgYnRuQ29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoYnRuLmljb24pIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uID8gYnRuLmljb24gOiBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnRuLmljb25Gb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uRm9ybWF0dGVyID8gYnRuLmljb25Gb3JtYXR0ZXIoZCwgYnRuKSA6IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidG4uc2hhcGUpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGNhcC1idG4tXCIgKyBidG4uc2hhcGU7XG4gICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgIGJ0bi5mb3JtYXR0ZXIgPyBidG4uZm9ybWF0dGVyKGQsIGJ0bikgOiBcIlwiXG4gICAgICAgICAgICAgIH0gPC9zcGFuPiBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgbGV0IG5ld0NsYXNzTmFtZSA9IGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIoZCwgYnRuKTtcbiAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIG5ld0NsYXNzTmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke2J0bi5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtidG5Db250ZW50fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIC8vYnV0dG9uc1xuICAgICAgICAgIGJ0bk5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJjYXAtYnRuLWNoaWxkLW5hdi1pdGVtIHBhcmVudCAke1xuICAgICAgICAgICAgZC5pc0Nsb3NlZCA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH1cIiBjaGlsZD1cIiR7ZC5pZCB8fCAtMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbS1jb250ZW50XCI+YDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5idXR0b25zICYmXG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzLmZvckVhY2goKGJ0bikgPT4ge1xuICAgICAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb24gPyBidG4uaWNvbiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyBidG4uaWNvbkZvcm1hdHRlcihjLCBidG4pXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnRuLnNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgY2FwLWJ0bi1cIiArIGJ0bi5zaGFwZTtcbiAgICAgICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgICAgICBidG4uZm9ybWF0dGVyID8gYnRuLmZvcm1hdHRlcihjLCBidG4pIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfSA8L3NwYW4+IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChidG4uYnRuQ2xhc3NOYW1lRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbmV3Q2xhc3NOYW1lID0gYnRuLmJ0bkNsYXNzTmFtZUZvcm1hdHRlcihjLCBidG4pO1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBuZXdDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnRuTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7YnRuLmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBpdGVtRGV0YWlsID0gYCA8ZGl2IGNsYXNzPVwiZGV0YWlsLW5hdi1pdGVtIGhpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldERldGFpbE5hdkl0ZW1Db250ZW50KCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IHN0ciA9IGA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aXRlbURldGFpbH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke25hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aW5pdGlhbE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5kLW5hdi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHtleE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7YnRuTmF2TGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IG5hdkNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICRlbGVtLmFwcGVuZChuYXZDb250YWluZXIpO1xuXG4gICAgLy9kZXRhbGxlIGRlIG5hdi1pdGVtXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLXRpdGxlLmhvdmVyYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcIm92ZXJOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHBvczogcG9zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvL29jdWx0YSBkZXRhbGxlIGRlIG5hdi1pdGVtLCBhbCBzYWxpciBkZWwgbmF2LWl0ZW0tbGlzdFxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubmF2LWl0ZW0tbGlzdFwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIChlKSA9PiB7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJsZWF2ZU5hdkl0ZW1cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vb2N1bHRhIGRldGFsbGUgZGUgbmF2LWl0ZW0tbGlzdCwgYWwgc2FsaXIgZGUgbmF2LWl0ZW1cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGU6bm90KC5ob3ZlcmFibGUpXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZSkgPT4ge1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwibGVhdmVOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGUuY2xpY2tlYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAvLyBzaSB0aWVuZSBjbGlja0xhYmVsVG9EZXRhaWwsIGVzZSBoYW5kbGVyIHNlIGVuY2FyZ2EgKG5vIGRpc3BhcmFyIGNsaWNrTmF2TGVmdEl0ZW0pXG4gICAgICAgIGlmIChpLmNsYXNzTGlzdC5jb250YWlucyhcImNsaWNrLWxhYmVsLXRvLWRldGFpbFwiKSkgcmV0dXJuO1xuICAgICAgICBsZXQgaXRlbUlkID0gaS5nZXRBdHRyaWJ1dGUoXCJpdGVtLWlkXCIpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgbGV0IHZhbHVlID0gaS52YWx1ZTtcbiAgICAgICAgY29uc3QgJGNvbnRhaW5lciA9IGkuY2xvc2VzdChcIi5uYXYtaXRlbS1jb250YWluZXJcIik7XG4gICAgICAgIGNvbnN0IGlzR3JvdXAgPSAkY29udGFpbmVyICYmICRjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFwicGFyZW50XCIpO1xuICAgICAgICBjb25zdCBpc0l0ZW0gPSBpLmNsb3Nlc3QoXCIuY2hpbGQtbmF2LWl0ZW1cIikgIT09IG51bGw7XG4gICAgICAgIGNvbnN0IGtpbmQgPSBpc0l0ZW0gPyBcIml0ZW1cIiA6IGlzR3JvdXAgPyBcImdyb3VwXCIgOiBcInVua25vd25cIjtcbiAgICAgICAgY29uc29sZS5sb2coXCJbQ2FwaWJhcmEgbmF2XSBjbGlja05hdkxlZnRJdGVtXCIsIHtcbiAgICAgICAgICBraW5kLFxuICAgICAgICAgIGlzR3JvdXAsXG4gICAgICAgICAgaXNJdGVtLFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICB0eXBlTm9kZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogXCIobm8gdmFsdWUpXCIsXG4gICAgICAgICAgdGFyZ2V0OiBlLnRhcmdldCA/IGUudGFyZ2V0LmNsYXNzTmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja05hdkxlZnRJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgaXNHcm91cCxcbiAgICAgICAgICAgICAgaXNJdGVtLFxuICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm11bHRpYnV0dG9ucy1idG5cIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tNdWx0aUJ1dHRvbnNCdG5cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlTm9kZSxcbiAgICAgICAgICAgICAgcG9zLFxuICAgICAgICAgICAgICBidXR0b246IGksXG4gICAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpbnB1dFR5cGUgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LXR5cGVcIik7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdmFsdWUgPSBpLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXRUeXBlID09IFwidGltZVwiKSB7XG4gICAgICAgICAgbGV0IGhoX2lucHV0ID0gaS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dC5oaFwiKS52YWx1ZTtcbiAgICAgICAgICBsZXQgbW1faW5wdXQgPSBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlO1xuICAgICAgICAgIG1tX2lucHV0ID0gbW1faW5wdXQgPCAxMCA/IFwiMFwiICsgcGFyc2VGbG9hdChtbV9pbnB1dCkgOiBtbV9pbnB1dDtcbiAgICAgICAgICBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlID0gbW1faW5wdXQ7XG4gICAgICAgICAgdmFsdWUgPSBoaF9pbnB1dCArIFwiOlwiICsgbW1faW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVOYXZMZWZ0SW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgdGFiU2VsZWN0ZWQ6IHRhYixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvbi5jYXAtYnRuLXNoYXBlXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja05hdkxlZnRCdXR0b25cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b24uZGV0YWlsLWJ0blwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOyAvLyBldml0YXIgcXVlIHRhbWJpw6luIGRpc3BhcmUgZWwgY2xpY2sgZGUgaXRlbS10aXRsZVxuICAgICAgICBsZXQgaXRlbUlkID0gaS5nZXRBdHRyaWJ1dGUoXCJpdGVtLWlkXCIpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgbGV0IGl0ZW0gPSB1dGlscy5nZXRJdGVtQnlJZChjb25maWcsIGl0ZW1JZCwgXCJwYXJlbnRcIik7XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5vbkNsaWNrRGV0YWlsQnV0dG9uKSB7XG4gICAgICAgICAgaXRlbS5vbkNsaWNrRGV0YWlsQnV0dG9uKHtcbiAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgICBidXR0b246IGksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gY2xpY2sgZW4gbm9tYnJlL2xhYmVsIGVqZWN1dGEgb25DbGlja0RldGFpbEJ1dHRvbiBjdWFuZG8gY2xpY2tMYWJlbFRvRGV0YWlsXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLXRpdGxlLmNsaWNrLWxhYmVsLXRvLWRldGFpbFwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdChcIi5kZXRhaWwtYnRuXCIpKSByZXR1cm47IC8vIGVsIGJvdMOzbiB5YSBsbyBtYW5lamFcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQsIFwicGFyZW50XCIpO1xuXG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0ub25DbGlja0RldGFpbEJ1dHRvbikge1xuICAgICAgICAgIGl0ZW0ub25DbGlja0RldGFpbEJ1dHRvbih7XG4gICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgIHR5cGU6IHR5cGVOb2RlLFxuICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgYnV0dG9uOiBudWxsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b24udHJlZS1pY29uXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBsZXQgZGF0YUNvbmZpZyA9IGNvbmZpZy5kYXRhLmZpbmQoKGQpID0+IGQuaWQgPT0gaXRlbUlkKTtcblxuICAgICAgICBsZXQgJG5hdkl0ZW0gPSBlLmN1cnJlbnRUYXJnZXQuY2xvc2VzdChcIi5uYXYtaXRlbVwiKTtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRuYXZJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIuY2hpbGRyZW4taXRlbXNcIik7XG4gICAgICAgIGxldCBpdGVtc1RvSGlkZSA9IGUuY3VycmVudFRhcmdldFxuICAgICAgICAgIC5jbG9zZXN0KFwibmF2LmxlZnRcIilcbiAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgIFwiW2NoaWxkPSdcIiArIGl0ZW1JZCArIFwiJ10sIFtjaGlsZC1saXN0PSdcIiArIGl0ZW1JZCArIFwiJ11cIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKCRjaGlsZHJlbikge1xuICAgICAgICAgIGlmICgkY2hpbGRyZW4uY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSkge1xuICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJjYXAtcm90YXRlXCIpO1xuICAgICAgICAgICAgaXRlbXNUb0hpZGUuZm9yRWFjaCgoaSkgPT4gaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKSk7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLmlzQ2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwiY2FwLXJvdGF0ZVwiKTtcbiAgICAgICAgICAgIGl0ZW1zVG9IaWRlLmZvckVhY2goKGkpID0+IGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIikpO1xuICAgICAgICAgICAgZGF0YUNvbmZpZy5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrTmF2TGVmdFRyZWVJY29uXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy9lLmN1cnJlbnRUYXJnZXQucGFyZW50XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIdG1sIGNvbW8gU3RyaW5nLCBwYXJhIGVsIGRldGFsbGUgZGUgaXRlbXMgZW4gZWwgU2lkZWJhciBJenF1aWVyZG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtpdGVtPXt9XSAtIENvbmZpZ3VyYWNpb24gZGUgaXRlbVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IEh0bWwgZGUgdmVudGFuYSBkZSBkZXRhbGxlXG4gICAqL1xuICBnZXREZXRhaWxOYXZJdGVtQ29udGVudChpdGVtID0ge30pIHtcbiAgICBpZiAoaXRlbS5uYXZPdmVyID09IHVuZGVmaW5lZCkgaXRlbS5uYXZPdmVyID0ge307XG5cbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLnN1YnRpdGxlIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jaGlwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxpZ2h0ID8gaXRlbS5saWdodCArIFwiLWxpZ2h0XCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfSAgJHtpdGVtLm5hdk92ZXIuY2hpcCA/IFwiXCIgOiBcImhpZGVcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLmNoaXAgfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2l0ZW0ubmF2T3Zlci5jb250ZW50IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFVzYWRvIHByaW5jaXBhbG1lbnRlIHBhcmEgZm9ybXVsYXJpbyBkZSBpbmdyZXNvIGRlIGRhdG9zIHBhcmEgbG9zIGRpYXNcbiAgICogc2VsZWNjaW9uYWRvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHJldHVybiB7T2JqZWN0fSB7ZWxlbWVudCwgaW5wdXRzfSwgZWxlbWVudCBlcyBlbCBlbGVtZW50byBEb20gZGVsIHNpZGViYXIsXG4gICAqICAgICAgICAgICAgICAgICAgaW5wdXRzIGVzIHVuIGFycmF5IGRlIGVsZW1lbnRvcyBEb20gZGUgY2FkYSBpbnB1dCBjcmVhZG9cbiAgICogICAgICAgICAgICAgICAgICAobm8gc29uIGVsZW1lbnRvcyBodG1sIGRlIHRpcG8gaW5wdXQpXG4gICAqL1xuICBjcmVhdGVOYXZSaWdodChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICB2YXIgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJyaWdodFwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd05hdlJpZ2h0KGNvbmZpZywgJGVsZW0sIHRhYiwgbnVsbCwgW10sIG51bGwpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgZGVyZWNob1xuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSBkYXRvcyBkZWwgZGlhIHNlbGVjY2lvbmFuZG8sIHBhcmEgYXV0b3JyZWxsZW5vIGRlIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRheVNlbGVjdGVkIC0gZGF0b3MgZGVsIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRheVNlbGVjdGVkLmRhdGUgLSBmZWNoYSBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF5U2VsZWN0ZWQuaXRlbSAtIEl0ZW0gZGUgU2lkZWJhciByZWxhY2lvbmFkbyBhbCBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXlTZWxlY3RlZC5wb3MgLSBwb3NpY2lvbiBkZSBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIFNpZGViYXIgRGVyZWNob1xuICAgKi9cbiAgcmVkcmF3TmF2UmlnaHQoXG4gICAgY29uZmlnLFxuICAgICRlbGVtLFxuICAgIHNlbGVjdGVkID0gbnVsbCxcbiAgICB0YWIgPSBudWxsLFxuICAgIGRhdGFEYXkgPSBudWxsLFxuICAgIGRheVNlbGVjdGVkID0gbnVsbFxuICApIHtcbiAgICBsZXQgJG5hdlJpZ2h0ID0gJGVsZW07IC8vZG9tLmNyZWF0ZUVsZW1lbnQoXCJuYXZcIix7Y2xhc3NOYW1lOlwicmlnaHRcIn0pO1xuICAgIGxldCAkZGl2Q29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5hdi1pbnB1dC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgIGxldCBjaGVja2JveElucHV0cyA9IFtdO1xuICAgIGxldCBpbnB1dHNXaXRoUmVsb2FkID0gW107XG4gICAgbGV0IHRhYlNlbGVjdGVkID0gdGFiO1xuICAgIHNlbGVjdGVkID0gc2VsZWN0ZWQgfHwgW2RheVNlbGVjdGVkXTtcblxuICAgIGlmICh0YWJTZWxlY3RlZCAmJiB0YWJTZWxlY3RlZC5pbnB1dHMpIHtcbiAgICAgIHRhYlNlbGVjdGVkLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmRpc2FibGVkKSByZXR1cm47XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpLnNob3dJbnB1dElmICYmXG4gICAgICAgICAgIWkuc2hvd0lucHV0SWYoZGF0YURheSwgZGF5U2VsZWN0ZWQsIHNlbGVjdGVkLCB0YWJTZWxlY3RlZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoXG4gICAgICAgICAgaSxcbiAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgIHRhYlNlbGVjdGVkXG4gICAgICAgICk7XG4gICAgICAgIGlmICgkaW5wdXQpIHtcbiAgICAgICAgICAkZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKCRpbnB1dCk7XG4gICAgICAgICAgJGlucHV0cy5wdXNoKCRpbnB1dCk7XG5cbiAgICAgICAgICBpZiAoaS50eXBlID09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dHMucHVzaCgkaW5wdXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLnJlbG9hZE9uU2VsZWN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0c1dpdGhSZWxvYWQucHVzaCh7ICRpbnB1dCwgY29uZmlnOiBpIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy9tYW5lam8gZGUgZXZlbnRvcyBwYXJhIGlucHV0cyBjb24gc2hvd0lmXG4gICAgaWYgKGNoZWNrYm94SW5wdXRzKSB7XG4gICAgICBjaGVja2JveElucHV0cy5mb3JFYWNoKCgkYykgPT4ge1xuICAgICAgICAvL29idGllbmUga2V5IGRlIGNoZWNrYm94XG4gICAgICAgIGxldCBrZXkgPSAkYy5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG4gICAgICAgIGxldCBwcm9wcyA9IHRhYlNlbGVjdGVkLmlucHV0cy5maW5kKChpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGkua2V5ID09IGtleTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGF0YURheSkge1xuICAgICAgICAgIGlzQ2hlY2tlZCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vb2J0aWVuZSBpbnB1dHMgcmVsYWNpb25hZG9zIGRlc2RlIGNvbmZpZyBwYXJhIG1vc3RyYXIvb2N1bHRhclxuICAgICAgICBsZXQgaW5wdXRzVG9IaWRlID0gdGFiU2VsZWN0ZWQuaW5wdXRzLmZpbHRlcigoaSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpLnNob3dJZiAmJiBpLnNob3dJZiA9PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaW5wdXRzVG9IaWRlS2V5cyA9IGlucHV0c1RvSGlkZS5tYXAoKGkpID0+IGkua2V5KTtcblxuICAgICAgICAvL29idGllbmUgaW5wdXRzIGRlbCBkb20sIGZpbHRyYW5kbyBjb24gaW5wdXRzVG9IaWRlXG4gICAgICAgIGxldCAkaW5wdXRzSGlkZGVuID0gJGlucHV0cy5maWx0ZXIoKCRpKSA9PiB7XG4gICAgICAgICAgbGV0IGlucHV0S2V5ID0gJGkuZ2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIpO1xuICAgICAgICAgIHJldHVybiBpbnB1dHNUb0hpZGVLZXlzLmluZGV4T2YoaW5wdXRLZXkpID4gLTE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vc2kgaGF5IGlucHV0cyxcbiAgICAgICAgaWYgKCRpbnB1dHNIaWRkZW4pIHtcbiAgICAgICAgICBpZiAoIWlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgJGlucHV0c0hpZGRlbi5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgICAgICAkaS5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkYy5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICRpbnB1dHNIaWRkZW4uZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGZuID0gJGMucXVlcnlTZWxlY3RvcihcImlucHV0W3R5cGU9J2NoZWNrYm94J11cIikuY2hlY2tlZFxuICAgICAgICAgICAgICAgID8gXCJyZW1vdmVcIlxuICAgICAgICAgICAgICAgIDogXCJhZGRcIjtcbiAgICAgICAgICAgICAgJGkuY2xhc3NMaXN0W2ZuXShcImhpZGVcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHNhdmVDYW5jZWxCdG5zID0gdGhpcy5jcmVhdGVOYXZSaWdodGJ1dHRvbnMoY29uZmlnKTtcbiAgICAkZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKHNhdmVDYW5jZWxCdG5zKTtcbiAgICAkbmF2UmlnaHQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAkbmF2UmlnaHQuYXBwZW5kQ2hpbGQoJGRpdkNvbnRhaW5lcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogJG5hdlJpZ2h0LFxuICAgICAgaW5wdXRzOiAkaW5wdXRzLFxuICAgICAgaW5wdXRzV2l0aFJlbG9hZCxcbiAgICAgIHNhdmVDYW5jZWxCdG5zLFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQ29ybmVyIGluZmVyaW9yIGl6cXVpZXJkbywgY29tbyB0aXR1bG8gcGFyYSBmb290ZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlQ29ybmVyRm9vdGVyKGNvbmZpZykge1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5mb290ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3Rlci5lbmFibGVkID09IGZhbHNlXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmZvb3Rlcikge1xuICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiY29ybmVyLWZvb3RlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5mb290ZXIubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgRm9vdGVyIHBhcmEgbW9iaWxlIChkZWJham8gZGUgbGEgdGFibGEsIHJlZGltZW5zaW9uYSBsYSBwbGFuaWxsYSlcbiAgICogU29sbyB2aXNpYmxlIGVuIG1vYmlsZSBjdWFuZG8gaGF5IHNlbGVjY2nDs24uXG4gICAqIENvbmZpZzogdGltZWxpbmUubW9iaWxlRm9vdGVyLmNhbmNlbExhYmVsLCB0aW1lbGluZS5tb2JpbGVGb290ZXIuY2FuY2VsU2hvd1doZW4sXG4gICAqICAgdGltZWxpbmUubW9iaWxlRm9vdGVyLmJ1dHRvbnNcbiAgICogICBjYW5jZWxTaG93V2hlbjogXCJzZWxlY3RcInxcImRldGFpbFwifFwiYWx3YXlzXCIgLSBjdcOhbmRvIG1vc3RyYXIgY2FuY2VsIChkZWZhdWx0OiBcInNlbGVjdFwiKVxuICAgKiAgIGJ1dHRvbnM6IFt7IGlkLCBsYWJlbCwgaWNvbj8sIGN1c3RvbUNsYXNzPywgc2hvd1doZW4/LCBkaXNhYmxlZFdoZW5Ob1NlbGVjdGlvbj8sIG9uQ2xpY2sgfV1cbiAgICogICBzaG93V2hlbjogXCJzZWxlY3RcInxcImRldGFpbFwifFwiYWx3YXlzXCIgLSBzZWxlY3Q9Y2hlY2tib3ggYWN0aXZvLCBkZXRhaWw9Y2hlY2tib3ggaW5hY3Rpdm8gKGRlZmF1bHQ6IFwiYWx3YXlzXCIpXG4gICAqICAgZGlzYWJsZWRXaGVuTm9TZWxlY3Rpb246IHRydWUgLSBkZXNhY3RpdmEgZWwgYm90w7NuIGVuIG1vZG8gc2VsZWN0IHNpbiBkw61hcyBzZWxlY2Npb25hZG9zXG4gICAqICAgb25DbGljayh7IGV2dCwgc2VsZWN0ZWQgfSkgLSBzZWxlY3RlZDogYXJyYXkgZGUgeyBpbmRleCwgZGF0ZSwgaXRlbSwgcG9zIH0gY29uIGTDrWFzIHNlbGVjY2lvbmFkb3NcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gbW9iaWxlLWZvb3RlclxuICAgKi9cbiAgY3JlYXRlTW9iaWxlRm9vdGVyKGNvbmZpZykge1xuICAgIGNvbnN0IG1vYmlsZUZvb3RlckNvbmZpZyA9IGNvbmZpZy50aW1lbGluZS5tb2JpbGVGb290ZXIgfHwge307XG4gICAgY29uc3QgY2FuY2VsTGFiZWwgPSBtb2JpbGVGb290ZXJDb25maWcuY2FuY2VsTGFiZWwgfHwgXCJDYW5jZWxhclwiO1xuICAgIGNvbnN0IGNhbmNlbFNob3dXaGVuID0gbW9iaWxlRm9vdGVyQ29uZmlnLmNhbmNlbFNob3dXaGVuIHx8IFwic2VsZWN0XCI7XG4gICAgY29uc3QgYnV0dG9ucyA9IEFycmF5LmlzQXJyYXkobW9iaWxlRm9vdGVyQ29uZmlnLmJ1dHRvbnMpID8gbW9iaWxlRm9vdGVyQ29uZmlnLmJ1dHRvbnMgOiBbXTtcbiAgICBjb25zdCBtb2JpbGVTZWxlY3RBY3RpdmUgPSBjb25maWcudGltZWxpbmUubW9iaWxlU2VsZWN0YWJsZSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBtb2JpbGVTZWxlY3RMYWJlbCA9IG1vYmlsZVNlbGVjdEFjdGl2ZSA/IFwiRGVzYWN0aXZhciBzZWxlY2Npw7NuXCIgOiBcIkFjdGl2YXIgc2VsZWNjacOzbiBkZSBkw61hc1wiO1xuICAgIGNvbnN0IG1vYmlsZVNlbGVjdEljb24gPSBpY29ucy5nZXRDaGVja2JveEljb24gPyBpY29ucy5nZXRDaGVja2JveEljb24obW9iaWxlU2VsZWN0QWN0aXZlKSA6IChtb2JpbGVTZWxlY3RBY3RpdmUgPyBpY29ucy5jaGVja2JveENoZWNrZWQgOiBpY29ucy5jaGVja2JveFVuY2hlY2tlZCk7XG4gICAgY29uc3QgZm9yY2VNb2JpbGUgPSBjb25maWcudGltZWxpbmUgJiYgY29uZmlnLnRpbWVsaW5lLmZvcmNlTW9iaWxlID09PSB0cnVlO1xuICAgIGNvbnN0IGZvb3RlckNsYXNzZXMgPSBmb3JjZU1vYmlsZSA/IFwibW9iaWxlLWZvb3RlciBjLWQtbW9iaWxlLWZsZXhcIiA6IFwibW9iaWxlLWZvb3RlciBjLWQtbW9iaWxlLWZsZXggYy1kLWRlc2t0b3Atbm9uZVwiO1xuICAgIGxldCBzdHIgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiJHtmb290ZXJDbGFzc2VzfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWZvb3Rlci1jb250ZW50XCI+YDtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGVEZXNrdG9wICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgY291bnRIaWRkZW4gPSAhbW9iaWxlU2VsZWN0QWN0aXZlO1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImNhcC1idG4tbW9iaWxlLXNlbGVjdFwiIHRvZ2dsZS1tb2JpbGUtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkIG1vYmlsZS1mb290ZXItc2VsZWN0LXRvZ2dsZSAke21vYmlsZVNlbGVjdEFjdGl2ZSA/IFwiYWN0aXZlXCIgOiBcIlwifVwiXG4gICAgICAgICAgICAgICAgICByb2xlPVwic3dpdGNoXCIgYXJpYS1jaGVja2VkPVwiJHttb2JpbGVTZWxlY3RBY3RpdmV9XCIgYXJpYS1sYWJlbD1cIiR7bW9iaWxlU2VsZWN0TGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgIGNhcC10b29sdGlwPVwiJHttb2JpbGVTZWxlY3RMYWJlbH1cIj4ke21vYmlsZVNlbGVjdEljb259PHNwYW4gY2xhc3M9XCJtb2JpbGUtZm9vdGVyLXNlbGVjdC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBFZGl0YXIgRMOtYXNcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLWZvb3Rlci1zZWxlY3QtY291bnRcIiAke2NvdW50SGlkZGVuID8gJ3N0eWxlPVwiZGlzcGxheTpub25lXCInIDogJyd9PjAgZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgfVxuICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1mb290ZXItYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjYXAtYnRuLW91dGxpbmUgbW9iaWxlLWZvb3Rlci1jYW5jZWwgbW9iaWxlLWZvb3Rlci1zZWxlY3QtdG9nZ2xlXCIgZGF0YS1zaG93LXdoZW49XCIke2NhbmNlbFNob3dXaGVufVwiPiR7Y2FuY2VsTGFiZWx9PC9idXR0b24+YDtcbiAgICBidXR0b25zLmZvckVhY2goKGJ0biwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUNsYXNzID0gYnRuLmN1c3RvbUNsYXNzIHx8IFwiXCI7XG4gICAgICBjb25zdCBidG5DbGFzcyA9IGJ0bi5pY29uID8gXCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZFwiIDogXCJjYXAtYnRuLW91dGxpbmVcIjtcbiAgICAgIGNvbnN0IHNob3dXaGVuID0gYnRuLnNob3dXaGVuIHx8IFwiYWx3YXlzXCI7XG4gICAgICBjb25zdCBkaXNhYmxlZFdoZW5Ob1NlbGVjdGlvbiA9IGJ0bi5kaXNhYmxlZFdoZW5Ob1NlbGVjdGlvbiA9PT0gdHJ1ZTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBidG4uaWNvblxuICAgICAgICA/IGA8c3Bhbj48c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIiR7YnRuLmljb259XCIvPjwvc3ZnPjwvc3Bhbj5gXG4gICAgICAgIDogKGJ0bi5sYWJlbCB8fCBcIlwiKTtcbiAgICAgIHN0ciArPSBgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J0bkNsYXNzfSBtb2JpbGUtZm9vdGVyLWJ0biBtb2JpbGUtZm9vdGVyLXNlbGVjdC10b2dnbGUgJHtjdXN0b21DbGFzc31cIiBkYXRhLW1vYmlsZS1idG4taWR4PVwiJHtpbmRleH1cIiBkYXRhLW1vYmlsZS1idG49XCIke2J0bi5pZCB8fCBcIlwifVwiIGRhdGEtc2hvdy13aGVuPVwiJHtzaG93V2hlbn1cIiBkYXRhLWRpc2FibGVkLXdoZW4tbm8tc2VsZWN0aW9uPVwiJHtkaXNhYmxlZFdoZW5Ob1NlbGVjdGlvbn1cIj4ke2NvbnRlbnR9PC9idXR0b24+YDtcbiAgICB9KTtcbiAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgICBjb25zdCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICBjb25zdCAkdG9nZ2xlTW9iaWxlU2VsZWN0ID0gJGVsZW0ucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtbW9iaWxlLXNlbGVjdF1cIik7XG4gICAgaWYgKCR0b2dnbGVNb2JpbGVTZWxlY3QpIHtcbiAgICAgICR0b2dnbGVNb2JpbGVTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwidG9nZ2xlTW9iaWxlU2VsZWN0XCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBGb290ZXIgcGFyYSBwbGFuaWxsYVxuICAgKiBJbmljaWFsbWVudGUgY3JlYWRvIHBhcmEgdG90YWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICBjcmVhdGVGb290ZXIoY29uZmlnKSB7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3RlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBjb25maWcudGltZWxpbmUuZm9vdGVyLmVuYWJsZWQgPT0gZmFsc2VcbiAgICApXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGxldCBzdHIgPSBgXG4gICAgICAgIDxmb290ZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgICAgICBgO1xuICAgIGNvbmZpZy50aW1lbGluZS5mb290ZXIuZGF0YS5mb3JFYWNoKChkKSA9PiB7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWl0ZW1cIj4ke2QudmFsdWV9PC9kaXY+XG4gICAgICAgICAgICBgO1xuICAgIH0pO1xuICAgIHN0ciArPSBgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9vdGVyPlxuICAgICAgICBgO1xuXG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBGb290ZXIgcGFyYSBwbGFuaWxsYVxuICAgKiBJbmljaWFsbWVudGUgY3JlYWRvIHBhcmEgdG90YWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdFtdfSBzZWxlY3RlZCAtIGFycmF5IGRlIG9iamV0b3MsIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICBjcmVhdGVTZWxlY3RCb2FyZChjb25maWcsIHNlbGVjdGVkKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWNvbnRhaW5lclwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd1NlbGVjdEJvYXJkKCRlbGVtLCBzZWxlY3RlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgbGluZWEgdmVydGljYWwgcGFyYSBmZWNoYSBBY3R1YWxcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlVG9kYXlMaW5lKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlZHJhd1RvZGF5TGluZShcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRvZGF5LWxpbmVcIiB9KVxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBsaW5lYSB2ZXJ0aWNhbCBwYXJhIGZlY2hhIEFjdHVhbFxuICAgKiBzaSBlbCBlbGVtZW50byAkZWxlbSBubyBlcyBlbnZpYWRvLCBzZSBjcmVhIHVuIG51ZXZvIGVsZW1lbnRvXG4gICAqXG4gICAqIFNpIGVsIGRpYSBhY3R1YWwgbm8gZXN0YSBkZW50cm8gZGVsIHJhbmdvIGRlIGZlY2hhcyBkZWwgY29uZmlnLFxuICAgKiBkZXNoYWJpbGl0YSBsYSBsaW5lYSBjb24gbGEgY2xhc2UgY3NzIC5kaXNhYmxlLWxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IFskZWxlbT1udWxsXSAtIEVsZW1lbnRvIERvbSBkb25kZSByZWNyZWEgbGEgbGluZWEsIHNpIGVzIG51bGwsIGxhIGNyZWFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgcmVkcmF3VG9kYXlMaW5lKGNvbmZpZywgJGVsZW0gPSBudWxsKSB7XG4gICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKS5nZXRUaW1lKCk7XG4gICAgbGV0IHRvZGF5VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCB7IGhlaWdodCwgZGF5V2lkdGggfSA9IHV0aWxzLmdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpO1xuXG4gICAgaWYgKCRlbGVtID09IG51bGwpXG4gICAgICAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRvZGF5LWxpbmVcIiB9KTtcblxuICAgIGlmIChlbmRUaW1lIDwgdG9kYXlUaW1lKSB7XG4gICAgICAkZWxlbS5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZS1saW5lXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZWxlbS5jbGFzc0xpc3QucmVtb3ZlKFwiZGlzYWJsZS1saW5lXCIpO1xuICAgIH1cblxuICAgIGxldCBkaWZmRGF5cyA9IE1hdGguZmxvb3IoXG4gICAgICBkYXRlVXRpbHMuZGlmZkRheXMoXG4gICAgICAgIGNvbmZpZy50aW1lbGluZS5zdGFydCxcbiAgICAgICAgZGF0ZVV0aWxzLmZvcm1hdERhdGUobmV3IERhdGUoKSlcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBkaWZmID0gZGlmZkRheXMgKiBkYXlXaWR0aDtcbiAgICBkaWZmICs9IGRheVdpZHRoIC8gMiAtIDI7IC8vIHBhcmEgY2VudHJhciBsaW5lYVxuICAgIE9iamVjdC5hc3NpZ24oJGVsZW0uc3R5bGUsIHtcbiAgICAgIFwibWFyZ2luLWxlZnRcIjogZGlmZiArIFwicHhcIixcbiAgICAgIGhlaWdodDogaGVpZ2h0ICsgXCJweFwiLFxuICAgIH0pO1xuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBlbGVtZW50byBGbG9hdEJveCwgcXVlIGNvbnRpZW5lIGxvcyBkYXRvcyBxdWUgc2UgbXVlc3RyYSBlbiBsYSB0YWJsYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbW9zdHJhciBkYXRvcyBjb25maWd1cmFkb3MgcG9yIHRhYlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICBjcmVhdGVGbG9hdEJveChjb25maWcsIHRhYikge1xuICAgIGxldCAkY29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImZsb2F0LWJveC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdGbG9hdEJveChjb25maWcsIHRhYiwgJGNvbnRhaW5lcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBlbGVtZW50byBGbG9hdEJveCwgcXVlIGNvbnRpZW5lIGxvcyBkYXRvcyBxdWUgc2UgbXVlc3RyYSBlbiBsYSB0YWJsYVxuICAgKiBTZSB1c2EgcHJpbmNpcGFsbWVudGUgcGFyYSBtb3N0cmFyIGRhdG9zIGVuIGxhIHRhYmxhIGRlIGxhIHBsYW5pbGxhXG4gICAqIGxvcyBtdWVzdHJhIGRlIG1hbmVyYSBmbG90YW50ZSwgY2FsY3VsYW5kbyBlbCBUb3AgeSBlbCBMZWZ0IHNlZ3VuIGxhIHBvc2Npb25cbiAgICpcbiAgICogU2UgY29uc2lkZXJhbiBsb3MgZWxlbWVudG9zIHBhZHJlcyBvY3VsdG9zLCBwYXJhIG9jdWx0YXIgbG9zIGRhdG9zXG4gICAqXG4gICAqIFNlIGluc2VydGFuIGxvcyBlbGVtZW50b3MgRmxvYXRCb3gsIGNvbW8gZWxlbWVudG8gY29uIGRhdG9zIGRlIHVuIGl0ZW0geSBkaWEgZXNwZWNpZmljb1xuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbW9zdHJhciBkYXRvcyBjb25maWd1cmFkb3MgcG9yIHRhYlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICByZWRyYXdGbG9hdEJveChjb25maWcsIHRhYiwgJGNvbnRhaW5lcikge1xuICAgICRjb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAvL2xldCB0YWJTZWxlY3RlZCA9IHRhYiB8fCBudWxsO1xuXG4gICAgY29uZmlnLmRhdGEuZm9yRWFjaCgoZGF0YVBhcmVudCkgPT4ge1xuICAgICAgaWYgKGRhdGFQYXJlbnQuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgKGRhdGFQYXJlbnQuZGF0YSB8fCBbXSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUZsb2F0Qm94SXRlbSh7XG4gICAgICAgICAgY29udGFpbmVyOiAkY29udGFpbmVyLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgaXRlbTogZGF0YVBhcmVudCxcbiAgICAgICAgICBpc0Nsb3NlZDogZGF0YVBhcmVudC5pc0Nsb3NlZCxcbiAgICAgICAgICB0YWIsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHR5cGVOb2RlOiBcInBhcmVudFwiLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkYXRhUGFyZW50LmNoaWxkcmVuLmZvckVhY2goKGRhdGFDaGlsZCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUNoaWxkLmlzSGlkZGVuKSByZXR1cm47XG5cbiAgICAgICAgZGF0YUNoaWxkLmRhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuY3JlYXRlRmxvYXRCb3hJdGVtKHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogJGNvbnRhaW5lcixcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBpdGVtOiBkYXRhQ2hpbGQsXG4gICAgICAgICAgICBpc0Nsb3NlZDogZGF0YVBhcmVudC5pc0Nsb3NlZCxcbiAgICAgICAgICAgIHRhYixcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHR5cGVOb2RlOiBcImNoaWxkXCIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGNvbnRhaW5lcjtcbiAgfSxcblxuICBjcmVhdGVGbG9hdEJveEl0ZW0oe1xuICAgIGNvbnRhaW5lcixcbiAgICBkYXRhLFxuICAgIGl0ZW0sXG4gICAgaXNDbG9zZWQsXG4gICAgdGFiLFxuICAgIGNvbmZpZyxcbiAgICB0eXBlTm9kZSA9IFwiY2hpbGRcIixcbiAgfSkge1xuICAgIC8vIFZlcmlmaWNhciBzaSBoYXkgbWVuc2FqZVxuICAgIGxldCBtc2cgPSBudWxsO1xuICAgIGlmICh0YWIuZmxvYXRCb3ggJiYgdGFiLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKSB7XG4gICAgICBtc2cgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YSwgdGFiLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKTtcbiAgICB9XG4gICAgY29uc3QgaGFzTWVzc2FnZSA9IG1zZyB8fCAoZGF0YS5tZXNzYWdlICYmIGRhdGEubWVzc2FnZS52YWx1ZSk7XG5cbiAgICAvLyBWZXJpZmljYXIgc2kgaGF5IGVycm9yZXNcbiAgICBjb25zdCBoYXNFcnJvcnMgPSBkYXRhLmVycm9ycyAmJiBkYXRhLmVycm9ycy5sZW5ndGggPiAwO1xuXG4gICAgLy8gVmVyaWZpY2FyIHNpIGhheSBjb250ZW5pZG8gdmlzaWJsZSBlbiBmbG9hdEJveFxuICAgIGxldCBoYXNWaXNpYmxlQ29udGVudCA9IGZhbHNlO1xuXG4gICAgaWYgKGhhc01lc3NhZ2UgfHwgaGFzRXJyb3JzKSB7XG4gICAgICBoYXNWaXNpYmxlQ29udGVudCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChkYXRhLnZhbHVlcyAmJiB0YWIgJiYgdGFiLmZsb2F0Qm94KSB7XG4gICAgICAvLyBWZXJpZmljYXIgc2kgaGF5IGNvbnRlbmlkbyB2aXNpYmxlIGVuIG51bXMsIGRvdHMsIHBsb3RzLCBpY29uc1xuICAgICAgaWYgKHRhYi5mbG9hdEJveC5udW1zKSB7XG4gICAgICAgIGhhc1Zpc2libGVDb250ZW50ID0gdGFiLmZsb2F0Qm94Lm51bXMuc29tZSgobikgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgaWYgKG4udmFyTmFtZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFyTmFtZSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBzaG93SWYgPSB0cnVlO1xuICAgICAgICAgIGxldCBoaWRlSWYgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChuLnZhclNob3cpIHtcbiAgICAgICAgICAgIHNob3dJZiA9IEJvb2xlYW4odXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhclNob3cpKTtcbiAgICAgICAgICAgIC8vIFNpIG5vIGhheSB2YXJOYW1lIHBlcm8gaGF5IHZhclNob3csIGNvbnNpZGVyYXIgY29tbyBjb250ZW5pZG8gdmlzaWJsZSBzaSBzZSBjdW1wbGUgbGEgY29uZGljacOzblxuICAgICAgICAgICAgaWYgKCFuLnZhck5hbWUpIHtcbiAgICAgICAgICAgICAgaWYgKG4udmFySGlkZSkge1xuICAgICAgICAgICAgICAgIGhpZGVJZiA9IEJvb2xlYW4odXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhckhpZGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gc2hvd0lmICYmICFoaWRlSWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuLnZhckhpZGUpIHtcbiAgICAgICAgICAgIGhpZGVJZiA9IEJvb2xlYW4odXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhckhpZGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG4uaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICBoaWRlSWYgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiBzaG93SWYgJiYgIWhpZGVJZjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQgJiYgdGFiLmZsb2F0Qm94LmRvdHMpIHtcbiAgICAgICAgaGFzVmlzaWJsZUNvbnRlbnQgPSB0YWIuZmxvYXRCb3guZG90cy5zb21lKChkb3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBkb3QudmFyTmFtZSkgIT09IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50ICYmIHRhYi5mbG9hdEJveC5wbG90cykge1xuICAgICAgICBoYXNWaXNpYmxlQ29udGVudCA9IHRhYi5mbG9hdEJveC5wbG90cy5zb21lKChuKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJOYW1lKSAhPT0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQgJiYgdGFiLmZsb2F0Qm94Lmljb25zKSB7XG4gICAgICAgIGhhc1Zpc2libGVDb250ZW50ID0gdGFiLmZsb2F0Qm94Lmljb25zLnNvbWUoKGljb25Db25maWcpID0+IHtcbiAgICAgICAgICBpZiAoaWNvbkNvbmZpZy52YXJOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBpY29uQ29uZmlnLnZhck5hbWUpICE9PSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaWNvbkNvbmZpZy5pY29uICE9PSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCAmJiB0YWIuZmxvYXRCb3gucm93RG90cykge1xuICAgICAgICBoYXNWaXNpYmxlQ29udGVudCA9IHRhYi5mbG9hdEJveC5yb3dEb3RzLnNvbWUoKHJvdykgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHJvdykgJiZcbiAgICAgICAgICAgIHJvdy5zb21lKChkb3QpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBkb3QudmFyTmFtZSk7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgICAgbGV0IHNob3dJZiA9IHRydWU7XG4gICAgICAgICAgICAgIGxldCBoaWRlSWYgPSBmYWxzZTtcblxuICAgICAgICAgICAgICBpZiAoZG90LnZhclNob3cpIHtcbiAgICAgICAgICAgICAgICBzaG93SWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhclNob3cpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZG90LnZhckhpZGUpIHtcbiAgICAgICAgICAgICAgICBoaWRlSWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhckhpZGUpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBzaG93SWYgJiYgIWhpZGVJZjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2kgbm8gaGF5IGNvbnRlbmlkbyB2aXNpYmxlLCBubyBjcmVhciBlbCBmbG9hdEJveFxuICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vY2hpbGRyZW4gRGF0YVxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25GbG9hdEJveChjb25maWcsIGRhdGEsIGl0ZW0sIHR5cGVOb2RlKTtcblxuICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuXG4gICAgaWYgKGRhdGEuZXJyb3JzICYmIGRhdGEuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcImhhcy1lcnJvcnMgXCI7XG4gICAgICBpZiAoZGF0YS5lcnJvcnNbMF0pIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IGRhdGEuZXJyb3JzWzBdLmNsYXNzTmFtZUljb24gKyBcIiBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNDbG9zZWQpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcImhpZGUgXCI7XG4gICAgfVxuXG4gICAgaWYgKGhhc01lc3NhZ2UpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcImhhcy1tZXNzYWdlIFwiO1xuICAgIH1cblxuICAgIGxldCBzdHJNc2cgPSBcIlwiO1xuICAgIGlmIChoYXNNZXNzYWdlKSB7XG4gICAgICBsZXQgdmlld0JveCA9IFwiMCAwIDI0IDI0XCI7XG4gICAgICAvL2VtYWlsIG91dGxpbmUgaWNvblxuICAgICAgbGV0IGljb24gPVxuICAgICAgICBcIk0yMiA2QzIyIDQuOSAyMS4xIDQgMjAgNEg0QzIuOSA0IDIgNC45IDIgNlYxOEMyIDE5LjEgMi45IDIwIDQgMjBIMjBDMjEuMSAyMCAyMiAxOS4xIDIyIDE4VjZNMjAgNkwxMiAxMUw0IDZIMjBNMjAgMThINFY4TDEyIDEzTDIwIDhWMThaXCI7XG5cbiAgICAgIHN0ck1zZyA9IGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIiR7dmlld0JveH1cIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCIke2ljb259XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb2F0LWJveCAke2NsYXNzTmFtZX0gXCJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiJHtwb3NpdGlvbiA/IHBvc2l0aW9uIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7aXRlbS5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtpdGVtLnR5cGUgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgICAgICAgICAgJHtzdHJNc2d9XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvYXQtYm94LWNvbnRlbnRcIj5gO1xuXG4gICAgbGV0IHN0ckV4dCA9IGBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvYXQtYm94LWV4dCAke2lzQ2xvc2VkID8gXCJoaWRlXCIgOiBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIke3Bvc2l0aW9uID8gcG9zaXRpb24gOiBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7aXRlbS5pZCB8fCAtMX0tZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2l0ZW0udHlwZSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvbmctYmFyLWNvbnRhaW5lclwiPmA7XG5cbiAgICBpZiAodGFiICYmIHRhYi5mbG9hdEJveCkge1xuICAgICAgaWYgKHRhYi5mbG9hdEJveC5wbG90cykge1xuICAgICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJwbG90LWZsb2F0Ym94LWNvbnRhaW5lclwiPmA7XG4gICAgICAgIHRhYi5mbG9hdEJveC5wbG90cy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgbGV0IGNzc1ZhcnMgPSBcIlwiO1xuICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgIGlmICh1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFyTmFtZSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChuLmNvbG9yKSB7XG4gICAgICAgICAgICAgIGNzc1ZhcnMgPSBgLS1sb2NhbC1jb2xvcjoke24uY29sb3J9O2A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IG4uY2xhc3NOYW1lIHx8IFwiXCI7XG5cbiAgICAgICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cInBsb3QtZmxvYXRib3ggJHtjbGFzc05hbWV9ICR7XG4gICAgICAgICAgICAgIG4uc3R5bGUgfHwgXCJcIlxuICAgICAgICAgICAgfVwiIHN0eWxlPVwiJHtjc3NWYXJzfSBcIj48L2Rpdj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFiLmZsb2F0Qm94Lmljb25zKSB7XG4gICAgICAgIHRhYi5mbG9hdEJveC5pY29ucy5mb3JFYWNoKChpY29uQ29uZmlnKSA9PiB7XG4gICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNvbG9yQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIGxldCBjb2xvclN0eWxlID0gXCJcIjtcbiAgICAgICAgICBsZXQgdmlld0JveCA9IFwiMCAwIDI0IDI0XCI7XG4gICAgICAgICAgbGV0IGljb24gPSBpY29uQ29uZmlnLmljb24gfHwgbnVsbDtcblxuICAgICAgICAgIGlmIChpY29uQ29uZmlnLnZhck5hbWUpIHtcbiAgICAgICAgICAgIGxldCBpY29uVmFyID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBpY29uQ29uZmlnLnZhck5hbWUpO1xuICAgICAgICAgICAgaWYgKGljb25WYXIpIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGljb25WYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGljb25Db25maWcuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgPSBpY29uQ29uZmlnLmNsYXNzTmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaWNvbkNvbmZpZy5jb2xvcikge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoaWNvbkNvbmZpZy5jb2xvcikpIHtcbiAgICAgICAgICAgICAgY29sb3JTdHlsZSA9IGAtLWxvY2FsLWNvbG9yOiAke2ljb25Db25maWcuY29sb3J9O2A7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2xvckNsYXNzID0gaWNvbkNvbmZpZy5jb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaWNvbkNvbmZpZy5jb2xvclZhck5hbWUpIHtcbiAgICAgICAgICAgIGxldCBjb2xvclZhciA9IHV0aWxzLmdldFZhckJ5UGF0aChcbiAgICAgICAgICAgICAgZGF0YS52YWx1ZXMsXG4gICAgICAgICAgICAgIGljb25Db25maWcuY29sb3JWYXJOYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNvbG9yVmFyKSB7XG4gICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGNvbG9yVmFyKSkge1xuICAgICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtjb2xvclZhcn07YDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvckNsYXNzID0gY29sb3JWYXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWZsb2F0Ym94ICR7Y2xhc3NOYW1lfSAke1xuICAgICAgICAgICAgICAgICAgY29sb3JDbGFzcyA/IFwiaGFzLWNvbG9yXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlfVwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiJHt2aWV3Qm94fVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiJHtpY29ufVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy9udW1lcm9zIGVuIGVsIGZsb2F0Qm94XG4gICAgICBpZiAodGFiLmZsb2F0Qm94Lm51bXMpIHtcbiAgICAgICAgdGFiLmZsb2F0Qm94Lm51bXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmICh0YWIubGVnZW5kcyAmJiBuLnRhYktleSkge1xuICAgICAgICAgICAgbGV0IGxlZ2VuZCA9IHRhYi5sZWdlbmRzLmZpbmQoKGwpID0+IGwua2V5ID09IG4udGFiS2V5KTtcbiAgICAgICAgICAgIGlmIChsZWdlbmQgJiYgIWxlZ2VuZC5hY3RpdmUpIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgZGF0YUZsb2F0Qm94ID0gbnVsbDtcbiAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICBsZXQgc2hvd0lmID0gdHJ1ZTtcbiAgICAgICAgICBsZXQgaGlkZUlmID0gZmFsc2U7XG4gICAgICAgICAgbGV0IGNvbG9yQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIGxldCBjb2xvclN0eWxlID0gXCJcIjtcbiAgICAgICAgICBsZXQgY2xhc3NOYW1lc0V4dCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNvbG9yU3R5bGVFeHQgPSBcIlwiO1xuICAgICAgICAgIGxldCBjc3NWYXJzID0gXCJcIjtcblxuICAgICAgICAgIGlmIChuLnZhck5hbWUpIHtcbiAgICAgICAgICAgIGRhdGFGbG9hdEJveCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJOYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobi52YXJTaG93KSB7XG4gICAgICAgICAgICBzaG93SWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJTaG93KSk7XG4gICAgICAgICAgICAvLyBTaSBubyBoYXkgdmFyTmFtZSBwZXJvIGhheSB2YXJTaG93LCBlc3RhYmxlY2VyIGRhdGFGbG9hdEJveCBjb21vIHN0cmluZyB2YWPDrW8gcGFyYSByZW5kZXJpemFyIGJsb3F1ZSB2YWPDrW9cbiAgICAgICAgICAgIGlmICghbi52YXJOYW1lKSB7XG4gICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA9IFwiXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSBkYXRhRmxvYXRCb3ggfHwgXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobi52YXJIaWRlKSB7XG4gICAgICAgICAgICBoaWRlSWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJIaWRlKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG4uaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICBoaWRlSWYgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuLnNoYXBlKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gXCJzaGFwZS1cIiArIG4uc2hhcGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG4uY29sb3IpIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKG4uY29sb3IpKSB7XG4gICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtuLmNvbG9yfTtgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IG4uY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG4ubG9uZ0Jhcikge1xuICAgICAgICAgICAgbGV0IGxvbmdCYXJDb2xvciA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgbG9uZ0Jhck9wYWNpdHkgPSBcIlwiO1xuXG4gICAgICAgICAgICBpZiAobi5sb25nQmFyQ29sb3IpIHtcbiAgICAgICAgICAgICAgbG9uZ0JhckNvbG9yID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLmxvbmdCYXJDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsb25nQmFyQ29sb3IpIHtcbiAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IobG9uZ0JhckNvbG9yKSkge1xuICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVFeHQgPSBgLS1sb2NhbC1jb2xvcjogJHtsb25nQmFyQ29sb3J9O2A7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc0V4dCArPSBsb25nQmFyQ29sb3IgKyBcIi1saWdodCBcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2xvckNsYXNzICYmIGNvbG9yQ2xhc3MgIT0gXCJcIikge1xuICAgICAgICAgICAgICBjbGFzc05hbWVzRXh0ICs9IGNvbG9yQ2xhc3M7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yU3R5bGUgJiYgY29sb3JTdHlsZSAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgIGNvbG9yU3R5bGVFeHQgPSBjb2xvclN0eWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobi5sb25nQmFyT3BhY2l0eSkge1xuICAgICAgICAgICAgICBsb25nQmFyT3BhY2l0eSA9XG4gICAgICAgICAgICAgICAgdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLmxvbmdCYXJPcGFjaXR5KSB8fCBudWxsO1xuICAgICAgICAgICAgICBpZiAobG9uZ0Jhck9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlRXh0ICs9IFwiLS1sb2NhbC1vcGFjaXR5OiBcIiArIGxvbmdCYXJPcGFjaXR5ICsgXCI7XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG4ubG9uZ0JhckNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICBjbGFzc05hbWVzRXh0ICs9XG4gICAgICAgICAgICAgICAgdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLmxvbmdCYXJDbGFzc05hbWUpIHx8IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBsb25nQmFyID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLmxvbmdCYXIpO1xuICAgICAgICAgICAgaWYgKGxvbmdCYXIpIHtcbiAgICAgICAgICAgICAgY3NzVmFycyA9IGAtLWxvbmc6JHtsb25nQmFyfTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkYXRhRmxvYXRCb3ggIT09IG51bGwgJiYgc2hvd0lmICYmICFoaWRlSWYpIHtcbiAgICAgICAgICAgIHN0ciArPSBgPHNwYW4gY2xhc3M9XCJkYXRhICR7Y29sb3JDbGFzc30gJHtjbGFzc05hbWV9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGRhdGFGbG9hdEJveCA9PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRhdGFGbG9hdEJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YUZsb2F0Qm94ID09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdXRpbHMucm91bmQoZGF0YUZsb2F0Qm94LCBuLnJvdW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gO1xuXG4gICAgICAgICAgICBpZiAobi5sb25nQmFyICYmIGNzc1ZhcnMpIHtcbiAgICAgICAgICAgICAgc3RyRXh0ICs9IGA8ZGl2IGNsYXNzPVwibG9uZy1iYXIgJHtjbGFzc05hbWVzRXh0fVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlRXh0fSAke2Nzc1ZhcnN9IFwiPjwvZGl2PiBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vcHVudG9zIGVuIGVsIGZsb2F0Qm94XG4gICAgICBpZiAodGFiLmZsb2F0Qm94LmRvdHMpIHtcbiAgICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiZG90LWNvbnRhaW5lci1taWRkbGVcIj5gO1xuICAgICAgICB0YWIuZmxvYXRCb3guZG90cy5mb3JFYWNoKChkb3QpID0+IHtcbiAgICAgICAgICBpZiAodXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBkb3QudmFyTmFtZSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGNvbG9yQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGNvbG9yU3R5bGUgPSBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoZG90LnNoYXBlKSB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBkb3Quc2hhcGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkb3QuY29sb3IpIHtcbiAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoZG90LmNvbG9yKSkge1xuICAgICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtkb3QuY29sb3J9YDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvckNsYXNzID0gZG90LmNvbG9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3QgJHtjb2xvckNsYXNzfSAke2NsYXNzTmFtZX1cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZX1cIiA+PC9kaXY+YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH1cblxuICAgICAgLy9maWxhIGRlIHB1bnRvcyBlbiBmbG9hdEJveFxuICAgICAgaWYgKHRhYi5mbG9hdEJveC5yb3dEb3RzKSB7XG4gICAgICAgIHRhYi5mbG9hdEJveC5yb3dEb3RzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGxldCBmcmVlQ29sdW1ucyA9IDQ7XG4gICAgICAgICAgc3RyICs9IGA8c3BhbiBjbGFzcz1cInJvd2RvdC0tcm93IFwiPmA7XG5cbiAgICAgICAgICByb3cuZm9yRWFjaCgoZG90KSA9PiB7XG4gICAgICAgICAgICBpZiAodGFiLmxlZ2VuZHMgJiYgZG90LnRhYktleSkge1xuICAgICAgICAgICAgICBsZXQgbGVnZW5kID0gdGFiLmxlZ2VuZHMuZmluZCgobCkgPT4gbC5rZXkgPT0gZG90LnRhYktleSk7XG4gICAgICAgICAgICAgIGlmIChsZWdlbmQgJiYgIWxlZ2VuZC5hY3RpdmUpIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGFGbG9hdEJveCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBzaG93SWYgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGhpZGVJZiA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGNvbG9yQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGNvbG9yU3R5bGUgPSBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoZG90LnZhck5hbWUpIHtcbiAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBkb3QudmFyTmFtZSk7XG4gICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA9IHBhcnNlSW50KGRhdGFGbG9hdEJveCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkb3QudmFyU2hvdykge1xuICAgICAgICAgICAgICBzaG93SWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhclNob3cpKTtcbiAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ID0gZGF0YUZsb2F0Qm94IHx8IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkb3QudmFySGlkZSkge1xuICAgICAgICAgICAgICBoaWRlSWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhckhpZGUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRvdC5zaGFwZSkge1xuICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgc2hhcGUtXCIgKyBkb3Quc2hhcGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkb3QuY29sb3IpIHtcbiAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoZG90LmNvbG9yKSkge1xuICAgICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtkb3QuY29sb3J9YDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvckNsYXNzID0gZG90LmNvbG9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA+IDAgJiZcbiAgICAgICAgICAgICAgc2hvd0lmICYmXG4gICAgICAgICAgICAgICFoaWRlSWYgJiZcbiAgICAgICAgICAgICAgZnJlZUNvbHVtbnMgPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbGV0IG4gPSBkYXRhRmxvYXRCb3ggPiBmcmVlQ29sdW1ucyA/IGZyZWVDb2x1bW5zIDogZGF0YUZsb2F0Qm94O1xuICAgICAgICAgICAgICBmcmVlQ29sdW1ucyAtPSBuO1xuICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cInJvd2RvdC0tZG90ICR7Y29sb3JDbGFzc30gJHtjbGFzc05hbWV9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGV9XCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc3RyICs9IGA8L3NwYW4+YDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIHN0ckV4dCArPSBgXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG5cbiAgICBsZXQgJGVsZW1FeHQgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0ckV4dCk7XG5cbiAgICAkZWxlbS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsIChlKSA9PiB7XG4gICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJtb3VzZU92ZXJGbG9hdEJveFwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrRmxvYXRCb3hcIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCRlbGVtKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoJGVsZW1FeHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIERldGFpbERheSwgZGV0YWxsZSBkZSB2YWxvcmVzIGRlIGl0ZW0geSBEaWFcbiAgICogc2UgdXNhIHBhcmE6XG4gICAqICAgIC0gTXVlc3RyYSBub21icmUgZGUgaXRlbSB5IGRldGFsbGVzXG4gICAqICAgIC0gTXVlc3RyYSBjYXBzdWxhcyBkZSBkYXRvc1xuICAgKiAgICAtIE11ZXN0cmEgUGlsbHMsIHBpbGRvcmFzIGRlIGRhdG9zIHJlc3VtaWRvc1xuICAgKiAgICAtIE11ZXN0cmEgYWxlcnRhc1xuICAgKiAgICAtIE11ZXN0cmEgTWVuc2FqZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSAtIEl0ZW0gcmVsYWNpb25hZG9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWFcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb25seVN0cmluZ0NvbnRlbnQgPSBmYWxzZV0gLSBwYXJhIGVzY29nZXIgc2kgZGV2dWVsdmUgU3RyaW5nIG8gRG9tRWxlbWVudFxuICAgKiBAcmV0dXJuIHtTdHJpbmd8T2JqZWN0fSBFbGVtZW50byBjb21vIFN0cmluZyBvIERvbUVsZW1lbnRcbiAgICovXG4gIGNyZWF0ZURldGFpbERheShcbiAgICBjb25maWcsXG4gICAgaXRlbSA9IHt9LFxuICAgIGRhdGFEYXksXG4gICAgdGFiU2VsZWN0ZWQsXG4gICAgb25seVN0cmluZ0NvbnRlbnQgPSBmYWxzZVxuICApIHtcbiAgICBsZXQgc3RyID0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZGV0YWlsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgJHtpdGVtLmxhYmVsIHx8IFwiXCJ9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAke2RhdGFEYXkgPyBkYXRlVXRpbHMuZm9ybWF0RGF0ZVJlYWRlYWJsZShkYXRhRGF5LmRhdGUpIDogXCJcIn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGV0YWlsIGxpc3QgY29sdW1uLWZsZXhcIj5gO1xuXG4gICAgLy9DQVBTVUxFU1xuICAgIGxldCB2aXNpYmxlSXRlbXNDb3VudCA9IDA7IC8vIENvbnRhZG9yIGRlIGVsZW1lbnRvcyB2aXNpYmxlc1xuXG4gICAgaWYgKGRhdGFEYXkpIHtcbiAgICAgIGNvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkuY2Fwc3VsZXMuZm9yRWFjaCgoY2FwKSA9PiB7XG4gICAgICAgIC8vcGFyYSBjb21wcm9iYXIgc2kgdGllbmUgZGF0b3MsIHNlIG9idGllbmUgZWwgcHJpbWVyIHZhbG9yXG4gICAgICAgIC8vZGUgbGEgbGlzdGEgZGUgdmFsdWVzIGRlIHVuYSBjYXBzdWxhXG4gICAgICAgIGxldCBoYXNWYWx1ZXMgPVxuICAgICAgICAgIGNhcC52YWx1ZXMuZmlsdGVyKCh2KSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheS52YWx1ZXMsIHYudmFyTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkubGVuZ3RoID4gMDtcblxuICAgICAgICBsZXQgaGlkZUlmID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGNhcC5oaWRlSWYpIHtcbiAgICAgICAgICBoaWRlSWYgPSBCb29sZWFuKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LnZhbHVlcywgY2FwLmhpZGVJZikpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbG9yQ2xhc3MgPSBcIlwiO1xuICAgICAgICBsZXQgY29sb3JTdHlsZSA9IFwiXCI7XG5cbiAgICAgICAgaWYgKGNhcC5jb2xvcikge1xuICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGNhcC5jb2xvcikpIHtcbiAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtjYXAuY29sb3J9O2A7XG4gICAgICAgICAgICBjb2xvclN0eWxlICs9IGAtLWxvY2FsLWNvbG9yLWZvbnQ6ICR7Y2FwLmNvbG9yfTtgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xvckNsYXNzID0gY2FwLmNvbG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzVmFsdWVzICYmICFoaWRlSWYpIHtcbiAgICAgICAgICB2aXNpYmxlSXRlbXNDb3VudCsrOyAvLyBJbmNyZW1lbnRhciBjb250YWRvciBkZSBlbGVtZW50b3MgdmlzaWJsZXNcbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1kZXRhaWwgJHtjb2xvckNsYXNzfVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlfVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtaWNvbiAke2NhcC5zaGFwZSB8fCBcIlwifSBcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgJHtjYXAudGl0bGUgfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1kZXNjcmlwdGlvblwiPiBgO1xuXG4gICAgICAgICAgY2FwLnZhbHVlcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB2LnZhck5hbWVcbiAgICAgICAgICAgICAgPyB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheS52YWx1ZXMsIHYudmFyTmFtZSlcbiAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAoY2FwLmlzTGFiZWxlZEFycmF5KSB7XG4gICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKHZhbHVlTGFiZWxlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlTmFtZSA9IHYudmFsdWVOYW1lID8gdi52YWx1ZU5hbWUgOiBcInZhbHVlXCI7XG5cbiAgICAgICAgICAgICAgICBsZXQgdGVtcFZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKHZhbHVlTGFiZWxlZCwgdmFsdWVOYW1lKTtcblxuICAgICAgICAgICAgICAgIGlmICh0ZW1wVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gdi5yb3VuZFxuICAgICAgICAgICAgICAgICAgICA/IHV0aWxzLnJvdW5kKHRlbXBWYWx1ZSwgdi5yb3VuZClcbiAgICAgICAgICAgICAgICAgICAgOiB0ZW1wVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHYuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IHYuZm9ybWF0dGVyKHZhbHVlTGFiZWxlZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXRWYWx1ZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IHV0aWxzLmZvcm1hdE51bWJlcihvdXRwdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyICs9XG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICA6IGBcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzYyAke3Yuc2hvd0NvbHVtbiA/IFwiZGVzYy1jb2x1bW5cIiA6IFwiXCJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt2LmhpZGVMYWJlbCA/IFwiXCIgOiB2YWx1ZUxhYmVsZWQubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2RpdiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsXCI+YCArXG4gICAgICAgICAgICAgICAgICAgICAgKHYuaGlkZVByZWZmaXggIT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByZWZpeFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7di5wcmVmaXggfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAgICAgICAgIGA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtvdXRwdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPmAgK1xuICAgICAgICAgICAgICAgICAgICAgICh2LmhpZGVTdWZmaXggIT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1ZmZpeFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWVMYWJlbGVkLnN1ZmZpeCB8fCB2LnN1ZmZpeCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsZXQgb3V0cHV0VmFsdWUgPSB2LnJvdW5kID8gdXRpbHMucm91bmQodmFsdWUsIHYucm91bmQpIDogdmFsdWU7XG5cbiAgICAgICAgICAgICAgaWYgKHYuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB2LmZvcm1hdHRlcih7IG9wdGlvbnM6IHYsIGRhdGFEYXksIG91dHB1dFZhbHVlIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXRWYWx1ZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB1dGlscy5mb3JtYXROdW1iZXIob3V0cHV0VmFsdWUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG91dHB1dFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmVmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3YucHJlZml4IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7b3V0cHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWZmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3Yuc3VmZml4IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgPC9kaXY+YDsgLy8gZW5kIC5pdGVtLWRldGFpbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZ3JlZ2FyIGNsYXNlIHNpbmdsZS1pdGVtIHNpIHNvbG8gaGF5IHVuIGVsZW1lbnRvIHZpc2libGVcbiAgICBjb25zdCBjb2x1bW5DbGFzcyA9XG4gICAgICB2aXNpYmxlSXRlbXNDb3VudCA9PT0gMVxuICAgICAgICA/IFwibGlzdCBjb2x1bW4tZmxleCBzaW5nbGUtaXRlbVwiXG4gICAgICAgIDogXCJsaXN0IGNvbHVtbi1mbGV4XCI7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoXCJsaXN0IGNvbHVtbi1mbGV4XCIsIGNvbHVtbkNsYXNzKTtcblxuICAgIHN0ciArPSBgXG4gICAgICAgIDwvZGl2PmA7IC8vIGxpc3QtZGV0YWlsXG5cbiAgICAvL1BJTExTXG4gICAgaWYgKFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmRldGFpbERheS5waWxsc1Zhck5hbWUgJiZcbiAgICAgIGRhdGFEYXkgJiZcbiAgICAgIGRhdGFEYXkudmFsdWVzW2NvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNWYXJOYW1lXVxuICAgICkge1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudHMtZGV0YWlsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPiAke2NvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNUaXRsZX0gPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudHMtbGlzdFwiPmA7XG5cbiAgICAgIGRhdGFEYXkudmFsdWVzW2NvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNWYXJOYW1lXS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGUudmFsdWU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXRWYWx1ZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdmFsdWUgPSB1dGlscy5mb3JtYXROdW1iZXIodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50LWRldGFpbFwiPlxuICAgICAgICAgICAgICA8Yj4ke2UubGFiZWx9PC9iPlxuICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuXG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gOyAvL2VuZCAuZWxlbWVudC1kZXRhaWwgPiAuZWxlbWVudC1saXN0XG4gICAgfVxuXG4gICAgLy9zdHIgKz0gYDwvZGl2PmA7XG5cbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LmVycm9ycyAmJiBkYXRhRGF5LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRhRGF5LmVycm9ycy5mb3JFYWNoKChlcnIpID0+IHtcbiAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRcIj5cbiAgICAgICAgICAgICR7aWNvbnMuYWxlcnR9XG4gICAgICAgICAgICAke2Vyci5sYWJlbH1cbiAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IG1zZyA9IG51bGw7XG4gICAgbGV0IGF1dGhvciA9IG51bGw7XG4gICAgbGV0IGRhdGVNc2cgPSBudWxsO1xuICAgIGlmIChkYXRhRGF5ICYmIHRhYlNlbGVjdGVkLmZsb2F0Qm94ICYmIHRhYlNlbGVjdGVkLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKSB7XG4gICAgICBtc2cgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgdGFiU2VsZWN0ZWQuZmxvYXRCb3gubWVzc2FnZVBhdGgpO1xuICAgIH1cblxuICAgIGlmICghbXNnICYmIGRhdGFEYXkgJiYgZGF0YURheS5tZXNzYWdlICYmIGRhdGFEYXkubWVzc2FnZS52YWx1ZSkge1xuICAgICAgbXNnID0gZGF0YURheS5tZXNzYWdlLnZhbHVlO1xuICAgICAgYXV0aG9yID0gZGF0YURheS5tZXNzYWdlLmF1dGhvcjtcbiAgICAgIGRhdGVNc2cgPSBkYXRlVXRpbHMuZm9ybWF0RGF0ZVJlYWRlYWJsZShuZXcgRGF0ZShkYXRhRGF5Lm1lc3NhZ2UuZGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChtc2cpIHtcbiAgICAgIC8vbXNnID0gbXNnLnJlcGxhY2UoLyhcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1zai1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtc2pcIj5cbiAgICAgICAgICAgIDxwcmU+JHttc2cgfHwgXCJcIn08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zai1kZXRhaWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbWFpbFwiPiAke2F1dGhvciB8fCBcIlwifSA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZVwiPiAke2RhdGVNc2cgfHwgXCJcIn0gPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfVxuXG4gICAgbGV0IHN0ckNvbnRhaW5lciA9IGA8ZGl2IGNsYXNzPVwiZGV0YWlsLWRheSBkZC1oaWRlXCI+ICR7c3RyfSA8L2Rpdj5gO1xuXG4gICAgaWYgKG9ubHlTdHJpbmdDb250ZW50KSByZXR1cm4gc3RyO1xuXG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyQ29udGFpbmVyKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIEhUTUwgZGUgZGV0YWlsRGF5XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIC0gSXRlbSByZWxhY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IEVsZW1lbnRvIGNvbW8gU3RyaW5nLCBkZSBkZXRhaWxEYXlcbiAgICovXG4gIHJlZHJhd0RldGFpbERheShjb25maWcsIGl0ZW0sIGRhdGFEYXksIHRhYlNlbGVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGV0YWlsRGF5KGNvbmZpZywgaXRlbSwgZGF0YURheSwgdGFiU2VsZWN0ZWQsIHRydWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBvc2ljaW9uYSBGbG9hdEJveFxuICAgKiB2ZXJpZmljYSBzaSBlbCBwYXJlbnQgZXN0YSBkZXNwbGVnYWRvLCBwYXJhIG9jdWx0YXIgbG9zIGRhdG9zXG4gICAqXG4gICAqIFNvbG8gYWN0dWFsaXphIGxhcyBhbHR1cmFzIGRlIGxvcyBmbG9hdGJveFxuICAgKiBubyByZWNyZWEgbG9zIGZsb2F0Ym94LCBlcyBtYXMgb3B0aW1vXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIC0gSXRlbSByZWxhY2lvbmFkb1xuICAgKi9cbiAgcmVwb3NpdGlvbkZsb2F0Qm94KGNvbmZpZywgJGZsb2F0Qm94Q29udGFpbmVyKSB7XG4gICAgJGZsb2F0Qm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxvYXQtYm94XCIpLmZvckVhY2goKCRmKSA9PiB7XG4gICAgICBsZXQgaXRlbUlkID0gJGYuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgIGxldCBpdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdChcbiAgICAgICAgdXRpbHMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIilcbiAgICAgICk7XG4gICAgICBsZXQgaXRlbSwgcGFyZW50O1xuICAgICAgKHsgaXRlbSwgcGFyZW50IH0gPSB1dGlscy5nZXRJdGVtQnlJZChjb25maWcsIGl0ZW1JZCwgXCJjaGlsZFwiLCB0cnVlKSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBsZXQgdG9wID0gdXRpbHMuZ2V0UG9zaXRpb25CeUl0ZW0oY29uZmlnLCBpdGVtKTtcbiAgICAgICAgJGYuc3R5bGUudG9wID0gdG9wICogaXRlbUhlaWdodCArIFwicHhcIjtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuaXNDbG9zZWQpIHtcbiAgICAgICAgICAkZi5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgfSBlbHNlIGlmICgkZi5jbGFzc0xpc3QuY29udGFpbnMoXCJoaWRlXCIpKSB7XG4gICAgICAgICAgJGYuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIGluZGljYWRvcmVzIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsZW0gLSBFbGVtZW50byBEb20gZG9uZGUgY3JlYSBsb3MgZWxlbWVudG9zIHNlbGVjY2lvbmFkb3NcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gc2VsZWN0ZWQgLSBBcnJheSBjb24gbG9zIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBxdWUgY29udGllbmUgbG9zIGluZGljYWRvcmVzIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKi9cbiAgcmVkcmF3U2VsZWN0Qm9hcmQoJGVsZW0sIHNlbGVjdGVkKSB7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICBsZXQgaGFzTnVtYmVyID0gdHJ1ZTtcblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA9PSAxKSBoYXNOdW1iZXIgPSBmYWxzZTtcblxuICAgICAgc2VsZWN0ZWQuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICBsZXQgYXR0cmlidXRlcyA9IFtdO1xuXG4gICAgICAgIGlmIChoYXNOdW1iZXIpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goeyBuYW1lOiBcImNhcC1iYWRnZVwiLCB2YWx1ZTogcy5pbmRleCB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJHMgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcInNlbGVjdGVkLWRheVwiLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgICAkcy5zdHlsZS5sZWZ0ID0gcy5wb3MubGVmdCArIFwicHhcIjtcbiAgICAgICAgJHMuc3R5bGUudG9wID0gcy5wb3MudG9wICsgXCJweFwiO1xuICAgICAgICAkZWxlbS5hcHBlbmQoJHMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogT2J0aWVuZSBTdHJpbmcgY29uIGVzdGlsb3MgQ1NTIGRlIGxhIHBvc2ljaW9uIGRlIHVuIGZsb2F0Qm94XG4gICAqIGNhbGN1bGFkbyBzZWd1biBpdGVtIHkgZmVjaGEgZGUgbG9zIHZhbG9yZXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmEsIHBhcmEgdmVyIGZlY2hhIGRlIGluaWNpb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIERhdG9zIGRlbCBkaWEgaW5kaWNhZG9cbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW0gLSBJdGVtIHJlbGFjaW9uYWRvXG4gICAqIEByZXR1cm4ge1N0cmluZ30gU3RyaW5nIENTUyB0b3AgeSBsZWZ0ICwgcGFyYSBwb3NpY2lvbmFyIGZsb2F0Qm94IGVuIHRhYmxlXG4gICAqL1xuICBnZXRQb3NpdGlvbkZsb2F0Qm94KGNvbmZpZywgZGF0YSwgaXRlbSwgdHlwZU5vZGUpIHtcbiAgICBsZXQgbGVmdCA9IGRhdGVVdGlscy5kaWZmRGF5cyhjb25maWcudGltZWxpbmUuc3RhcnQsIGRhdGEuZGF0ZSk7XG4gICAgbGV0IHRvcCA9IHV0aWxzLmdldFBvc2l0aW9uQnlJdGVtKGNvbmZpZywgaXRlbSwgdHlwZU5vZGUpO1xuICAgIGxldCBkYXlXaWR0aCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICBsZXQgaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIikpO1xuICAgIGxlZnQgKj0gZGF5V2lkdGg7XG4gICAgdG9wICo9IGl0ZW1IZWlnaHQ7XG4gICAgcmV0dXJuIFwidG9wOiBcIiArIHRvcCArIFwiLjVweDsgbGVmdDpcIiArIGxlZnQgKyBcIi41cHg7XCI7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQm90b24gY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gcHJvcGllZGFkZXMgcGFyYSBib3RvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuY2xhc3NOYW1lIC0gY2xhc3NlcyBjc3MgcGFyYSBib3RvblxuICAgKiBAcGFyYW0geyp9IHByb3BzLmtleSAtIGtleSBwYXJhIGlkZW50aWZpY2FyIGEgYm90b25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmxhYmVsIC0gVGV4dG8gYm90b25cbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGJvdG9uIGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlQnV0dG9uKHByb3BzKSB7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIiR7cHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9XCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgPC9idXR0b24+YCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQm90b25lcyBkZSBndWFyZGFyIHkgY2FuY2VsYXIgbG9zIGRhdG9zIGRlIGZvcm11bGFyaW8gZGVsIHNpZGViYXIgZGVyZWNob1xuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgYm90b25lcyBjcmVhZG9zXG4gICAqL1xuICBjcmVhdGVOYXZSaWdodGJ1dHRvbnMoY29uZmlnKSB7XG4gICAgbGV0IGJ0blNlY3Rpb24gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKFxuICAgICAgYDxkaXYgY2xhc3M9XCJidXR0b24tc2VjdGlvblwiPjwvZGl2PmBcbiAgICApO1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYucmlnaHQgJiZcbiAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYucmlnaHQuaGlkZVNhdmVCdXR0b24gIT0gdHJ1ZVxuICAgICkge1xuICAgICAgbGV0IHNhdmVCdG4gPSB0aGlzLmNyZWF0ZUJ1dHRvbih7XG4gICAgICAgIGxhYmVsOiBcIkd1YXJkYXJcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcImNhcC1idG4tcmFpc2VkXCIsXG4gICAgICB9KTtcblxuICAgICAgYnRuU2VjdGlvbi5hcHBlbmRDaGlsZChzYXZlQnRuKTtcbiAgICAgIHNhdmVCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIHNhdmVCdG4uZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJzYXZlTXVsdGlJbnB1dFwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYucmlnaHQgJiZcbiAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYucmlnaHQuaGlkZUNhbmNlbEJ1dHRvbiAhPSB0cnVlXG4gICAgKSB7XG4gICAgICBjb25zdCBjYW5jZWxMYWJlbEJ1dHRvbiA9XG4gICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYucmlnaHQuY2FuY2VsTGFiZWxCdXR0b24gfHwgXCJDYW5jZWxhclwiO1xuICAgICAgbGV0IGNhbmNlbEJ0biA9IHRoaXMuY3JlYXRlQnV0dG9uKHtcbiAgICAgICAgbGFiZWw6IGNhbmNlbExhYmVsQnV0dG9uLFxuICAgICAgICBjbGFzc05hbWU6IFwiY2FwLWJ0bi1vdXRsaW5lXCIsXG4gICAgICB9KTtcblxuICAgICAgYnRuU2VjdGlvbi5hcHBlbmRDaGlsZChjYW5jZWxCdG4pO1xuXG4gICAgICBjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGNhbmNlbEJ0bi5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNhbmNlbE11bHRpSW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnRuU2VjdGlvbjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gW2RhdGFEYXkgPSBudWxsXSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IFtkYXlTZWxlY3RlZCA9IG51bGxdIC0gZGF0b3MgZGVsIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHBhcmFtIHtPYmplY3RbXX0gW3NlbGVjdGVkID0gW11dIC0gYXJyYXkgZGUgb2JqZXRvcywgZGUgZGlhcyBzZWxlY2Npb25hZG9zXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0KFxuICAgIHByb3BzLFxuICAgIGRhdGFEYXkgPSBudWxsLFxuICAgIGRheVNlbGVjdGVkID0gbnVsbCxcbiAgICBzZWxlY3RlZCA9IFtdLFxuICAgIHRhYlNlbGVjdGVkXG4gICkge1xuICAgIGxldCByID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pZ25vcmVSZW5kZXIgPT0gdHJ1ZSkgcmV0dXJuIHI7XG5cbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJjdXN0b21cIjpcbiAgICAgICAgciA9IHByb3BzLnJlbmRlclxuICAgICAgICAgID8gcHJvcHMucmVuZGVyKHsgcHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkLCBzZWxlY3RlZCB9KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIiwgcHJvcHMua2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0U2VsZWN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZpbGVcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRGaWxlKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZmlsZUxpbmtcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlRmlsZUxpbmsocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZVRleHQocHJvcHMsIHNlbGVjdGVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlVGl0bGUocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXROdW1iZXIocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJmbG9hdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dEZsb2F0KHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dE1lc3NhZ2UocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dFRleHRBcmVhKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiY2hlY2tib3hcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRDaGVja2JveChwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlucHV0TGlzdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dExpc3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5wdXQtYm94XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0Qm94KHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVMaXN0KHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGF0YS1saXN0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZURhdGFMaXN0KFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIGRhdGFEYXksXG4gICAgICAgICAgZGF5U2VsZWN0ZWQsXG4gICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgdGFiU2VsZWN0ZWRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnV0dG9uXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0QnV0dG9uKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnV0dG9ucy1ncm91cFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dEJ1dHRvbnNHcm91cChwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRpbWVcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRUaW1lKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5wdXQtdGV4dFwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRUZXh0KHByb3BzLCBkYXRhRGF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCBjb24gZm9ybWF0byBIb3JhLCBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBVc2EgMiBpbnB1dHMsIGhvcmEgeSBtaW51dG9zXG4gICAqXG4gICAqIGVsIHZhbHVlIHF1ZSBpbnRlcnByZXRhIGVzIFN0cmluZyBISDpNTVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gW2RhdGFEYXkgPSBudWxsXSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRUaW1lKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IGhoVmFsdWUgPSBcIlwiO1xuICAgIGxldCBtbVZhbHVlID0gXCJcIjtcblxuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICBsZXQgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgaGhWYWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICBtbVZhbHVlID0gdmFsdWVbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhvdXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF4PVwiOTlcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ltYm9sXCI+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaW51dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI1OVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke21tVmFsdWV9XCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGludFwiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMudGV4dEhpbnQgfHwgXCJcIn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgJGhoSW5wdXQgPSAkZWxlbS5xdWVyeVNlbGVjdG9yKFwiLmhvdXJcIik7XG4gICAgbGV0ICRtbUlucHV0ID0gJGVsZW0ucXVlcnlTZWxlY3RvcihcIi5taW51dGVzXCIpO1xuXG4gICAgJGhoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICAkaGhJbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjaGFuZ2VUaW1lSW5wdXRISFwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGtleTogcHJvcHMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IGUuc3JjRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICRtbUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgJG1tSW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2hhbmdlVGltZUlucHV0TU1cIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBrZXk6IHByb3BzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBlLnNyY0VsZW1lbnQudmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cygkaGhJbnB1dCwgJGVsZW0sIHByb3BzKTtcbiAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cygkbW1JbnB1dCwgJGVsZW0sIHByb3BzKTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBUZXh0IGNvbW8gZWxlbWVudG8gRG9tXG4gICAqIFNlIGNvbmZpZ3VyYSBjb21vIGlucHV0LCBwZXJvIG5vIGRldnVlbHZlIGRhdG9zLCBlcyB1biB0ZXh0b1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVUZXh0KHByb3BzLCBzZWxlY3RlZCkge1xuICAgIGxldCBsYWJlbCA9IHByb3BzLmxhYmVsO1xuICAgIGlmIChwcm9wcy5mb3JtYXR0ZXIpIHtcbiAgICAgIGxhYmVsID0gcHJvcHMuZm9ybWF0dGVyKHsgc2VsZWN0ZWQgfSk7XG4gICAgfVxuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGUgXCIgOiBcIlwifSAke1xuICAgICAgICAgICAgcHJvcHMudG9MZWZ0ID8gXCJ0by1sZWZ0IFwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiJHtwcm9wcy5jbGFzc05hbWVzIHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICAke2xhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PmApO1xuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBUaXRsZSBjb21vIGVsZW1lbnRvIERvbVxuICAgKiBTZSBjb25maWd1cmEgY29tbyBpbnB1dCwgcGVybyBubyBkZXZ1ZWx2ZSBkYXRvcywgZXMgdW4gdGV4dG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlVGl0bGUocHJvcHMpIHtcbiAgICBsZXQgY2xhc3NOYW1lcyA9IFwidGV4dC10aXRsZVwiO1xuICAgIGlmIChwcm9wcy5pc1N1YnRpdGxlKSB7XG4gICAgICBjbGFzc05hbWVzID0gXCJ0ZXh0LXN1YnRpdGxlXCI7XG4gICAgfVxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lc31cIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5gKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCB0aXBvIE51bWVyaWNvIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dE51bWJlcihwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlIHx8IFwiXCI7XG5cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuY2xhc3NOYW1lcyB8fCBcIlwifSAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0yIFwiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMuc3VmZml4ID8gXCIoXCIgKyBwcm9wcy5zdWZmaXggKyBcIilcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiPlxuXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1oaW50XCI+XG4gICAgICAgICAgICAgICAgICAke3Byb3BzLnRleHRIaW50IHx8IFwiXCJ9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0IGlucHV0RWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuXG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtLCBlbGVtLCBwcm9wcyk7XG5cbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCB0aXBvIEZJbGVwaWNrZXIgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0RmlsZShwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgbGV0IGZpbGVOYW1lID0gXCJcIjtcbiAgICBsZXQgZmlsZVBhdGggPSBcIlwiO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgICAgZmlsZU5hbWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMuZmlsZU5hbWVWYWx1ZSk7XG4gICAgICBmaWxlUGF0aCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy5maWxlUGF0aFZhbHVlKTtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlIHx8IFwiXCI7XG4gICAgZmlsZU5hbWUgPSBmaWxlTmFtZSB8fCBcIlwiO1xuICAgIGZpbGVQYXRoID0gZmlsZVBhdGggfHwgXCJcIjtcblxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5jbGFzc05hbWVzIHx8IFwiXCJ9ICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaW5wdXQtZmlsZVwiID5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtYWxsLWNsb3NlIGNsZWFyLWZpbGUtaW5wdXRcIj54PC9idXR0b24+XG4gICAgICAgICAgICAgIDxsYWJlbCA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtaW5wdXQtZmlsZS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgJHtwcm9wcy5waWNrZXJMYWJlbCB8fCBcIlNlbGVjY2lvbmFyIEFyY2hpdm9cIn1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLWxpbmtcIj5cbiAgICAgICAgICAgICAgPGEgaHJlZj1cIiR7ZmlsZVBhdGh9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgPlxuICAgICAgICAgICAgICAgICR7ZmlsZU5hbWV9XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgJGlucHV0RWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIGxldCAkY2xlYXJCdG4gPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIuY2xlYXItZmlsZS1pbnB1dFwiKTtcbiAgICBsZXQgJGZpbGVJbnB1dExhYmVsID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiLm5hdi1pbnB1dC1maWxlLWxhYmVsXCIpO1xuXG4gICAgJGlucHV0RWxlbS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChldnQpID0+IHtcbiAgICAgIGxldCBmaWxlTmFtZSA9ICRpbnB1dEVsZW0uZmlsZXNbMF0ubmFtZTtcbiAgICAgICRmaWxlSW5wdXRMYWJlbC50ZXh0Q29udGVudCA9IGZpbGVOYW1lO1xuICAgIH0pO1xuXG4gICAgJGNsZWFyQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZ0KSA9PiB7XG4gICAgICAkaW5wdXRFbGVtLnZhbHVlID0gXCJcIjtcbiAgICAgICRmaWxlSW5wdXRMYWJlbC50ZXh0Q29udGVudCA9IHByb3BzLnBpY2tlckxhYmVsIHx8IFwiU2VsZWNjaW9uYXIgQXJjaGl2b1wiO1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgY3JlYXRlRmlsZUxpbmsocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgZmlsZU5hbWUgPSBcIlwiO1xuICAgIGxldCBmaWxlUGF0aCA9IFwiXCI7XG5cbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgLy92YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICAgIGZpbGVOYW1lID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLmZpbGVOYW1lVmFsdWUpO1xuICAgICAgZmlsZVBhdGggPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMuZmlsZVBhdGhWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVOYW1lID09IFwiXCIpIHJldHVybiBudWxsO1xuXG4gICAgZmlsZU5hbWUgPSBmaWxlTmFtZSB8fCBcIlwiO1xuICAgIGZpbGVQYXRoID0gZmlsZVBhdGggfHwgXCJcIjtcblxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5jbGFzc05hbWVzIHx8IFwiXCJ9ICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLWxpbmtcIj5cbiAgICAgICAgICAgICAgPGEgaHJlZj1cIiR7ZmlsZVBhdGh9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgPlxuICAgICAgICAgICAgICAgICR7ZmlsZU5hbWV9XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBsaXN0YSBkZSBJbnB1dHMsIGNvbiBhcnJheSBkZSB2YWxvcmVzLCBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IFtkYXlTZWxlY3RlZCA9IG51bGxdIC0gZGF0b3MgZGVsIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRMaXN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCA9IG51bGwpIHtcbiAgICBsZXQgaW5wdXRMaXN0ID0gW107XG5cbiAgICAvL29idGllbmUgaW5wdXRzIGRlZmF1bHQsIHBhcmEgY3JlYXJsb3MsIHNpbiB2YWxvcmVzXG4gICAgaWYgKFxuICAgICAgZGF5U2VsZWN0ZWQgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoZGF5U2VsZWN0ZWQuaXRlbS52YWx1ZXNbcHJvcHMuaW5wdXRMaXN0XSlcbiAgICApIHtcbiAgICAgIGlucHV0TGlzdCA9IGRheVNlbGVjdGVkLml0ZW0udmFsdWVzW3Byb3BzLmlucHV0TGlzdF0ubWFwKChpbnB1dFJvdykgPT4ge1xuICAgICAgICAvL2xpbXBpYSBpbnB1dExpc3QgaW5wdXRzXG4gICAgICAgIGlucHV0Um93LmlucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICAgICAgaW5wdXQudmFsdWUgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9vYnRpZW5lIHZhbG9yZXMgZGVsIGRpYVxuICAgICAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgICAgIGxldCBpbnB1dFZhbHVlcyA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YWx1ZXNQYXRoKTtcblxuICAgICAgICAgIC8vYXV0b3JyZWxsZW5hXG4gICAgICAgICAgaWYgKGlucHV0VmFsdWVzKSB7XG4gICAgICAgICAgICBpbnB1dFJvdy5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IGlucHV0VmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT0gaW5wdXRSb3cuaWQpO1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlcyA/IHZhbHVlc1tpbnB1dC52YXJOYW1lXSA6IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5wdXRSb3c7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gYDxkaXYgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIiBjbGFzcz1cImlucHV0LXNlY3Rpb24tbGlzdCAke1xuICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICB9IFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPiBcbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgaW5wdXRMaXN0LmZvckVhY2goKGlucHV0Um93KSA9PiB7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMudG9SaWdodCA/IFwidG8tcmlnaHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgIH1cIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke2lucHV0Um93LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gO1xuXG4gICAgICBpbnB1dFJvdy5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgc3RyICs9IGAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLWNvbFwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke2lucHV0LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtaWQ9XCIke2lucHV0Um93LmlkfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtbGFiZWw9XCIke2lucHV0LmxhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtaW5wdXQgc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtpbnB1dC52YWx1ZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfSk7XG4gICAgc3RyICs9IGA8L2Rpdj5gO1xuXG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG5cbiAgICBsZXQgaW5wdXRzRWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvckFsbChcImlucHV0XCIpO1xuICAgIGlucHV0c0VsZW0uZm9yRWFjaCgoaW5wdXRFbGVtKSA9PlxuICAgICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtLCBlbGVtLCBwcm9wcylcbiAgICApO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIGNyZWF0ZUlucHV0U2VsZWN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCA9IG51bGwpIHtcbiAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgIGxldCBvcHRpb25zID0gcHJvcHMub3B0aW9ucztcblxuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICBsZXQgdmFsID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgICAgdmFsdWUgPSB2YWwgPyB2YWwudmFsdWUgOiBudWxsO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBgPGRpdiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiIGNsYXNzPVwiJHtcbiAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgfVwiID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uIFwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LXNlbGVjdFwiPlxuXG4gICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiAke3ZhbHVlID09IG51bGwgPyBcInNlbGVjdGVkXCIgOiBcIlwifT5cbiAgICAgICAgICAgICAgICAgICR7cHJvcHMubm9EYXRhTGFiZWwgfHwgXCItLSBzaW4gYXNpZ25hciAtLVwifVxuICAgICAgICAgICAgICAgICA8L29wdGlvbj5cblxuICAgICAgICBgO1xuXG4gICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIke29wdGlvbi5pZH1cIiAke1xuICAgICAgICAgICAgICAgICAgIG9wdGlvbi5pZCA9PSB2YWx1ZSA/IFwic2VsZWN0ZWRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgJHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIGA7XG4gICAgfSk7XG4gICAgc3RyICs9IGBcblxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PmA7XG5cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcblxuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IGRlIHRleHRvIFRleHRBcmVhIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dFRleHRBcmVhKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIlwiIHZhbHVlPVwiJHt2YWx1ZX1cIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0IGlucHV0RWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcInRleHRhcmVhXCIpO1xuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGlucHV0RWxlbSwgZWxlbSwgcHJvcHMpO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IGRlIE1lbnNhamUgY29tbyBlbGVtZW50byBEb21cbiAgICogdXRpbGl6YSBUZXh0QXJlYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRNZXNzYWdlKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gZGF0YURheSA/IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKSA6IG51bGw7XG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiB0by1sZWZ0IG1zai1pbnB1dC1jb250YWluZXIgJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIlxuICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgTWVuc2FqZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwibXNqXCI+JHt2YWx1ZSB8fCBcIlwifTwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7XG4gICAgLy90aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0pO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IGRlIHRleHRvIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dFRleHQocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJuYXYtaW5wdXRcIiB2YWx1ZT1cIiR7dmFsdWV9XCI+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtLCBlbGVtLCBwcm9wcyk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgTnVtZXJvIEZsb3RhbnRlLCBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRGbG9hdChwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgIH1cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwibmF2LWlucHV0XCIgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0IGlucHV0RWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGlucHV0RWxlbSwgZWxlbSwgcHJvcHMpO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIGNyZWF0ZURhdGFMaXN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCwgc2VsZWN0ZWQsIHRhYlNlbGVjdGVkKSB7XG4gICAgbGV0IGxpc3QgPSBbXTtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgbGlzdCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKSB8fCBbXTtcbiAgICB9XG5cbiAgICBsZXQgc2VhcmNoSW5wdXQgPSBwcm9wcy5oaWRlU2VhcmNoXG4gICAgICA/IFwiXCJcbiAgICAgIDogYCA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiYnVzY2FyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWFyY2gtaW5wdXQtY2xlYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpY29ucy5jbG9zZUljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgIGxldCBlZGl0QnRuID0gXCJcIjtcblxuICAgIGlmIChwcm9wcy5lZGl0QnV0dG9uKSB7XG4gICAgICBlZGl0QnRuID0gYDxidXR0b24gY2xhc3M9XCJjYXAtYnRuLXJhaXNlZCBjYXAtYnRuLXNtIGVkaXQtYnRuXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5lZGl0QnV0dG9uLmtleX1cIj5cbiAgICAgICAgICAgICAgICAgICAgJHtwcm9wcy5lZGl0QnV0dG9uLmxhYmVsfSBcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBgO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICR7ZWRpdEJ0bn1cdFxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveCBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgJHtzZWFyY2hJbnB1dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj4gYDtcblxuICAgIGxldCAkZWwgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gICAgbGV0ICRzZWFyY2hJbnB1dCA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1pbnB1dFwiKTtcbiAgICBsZXQgJHNlYXJjaElucHV0Q2xlYXIgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXQtY2xlYXJcIik7XG4gICAgbGV0ICRpbnB1dEJveCA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLmlucHV0LWJveFwiKTtcblxuICAgIGxldCAkaXRlbXMgPSBsaXN0Lm1hcCgoaXRlbSwgaikgPT4ge1xuICAgICAgbGV0IGxhYmVsID1cbiAgICAgICAgdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVMYWJlbCkgfHwgZGF0YURheS5sYWJlbCB8fCBcIl9fXCI7XG5cbiAgICAgIGxldCAkZWxJdGVtID0gdGhpcy5jcmVhdGVEYXRhTGlzdEl0ZW0oe1xuICAgICAgICBsYWJlbCxcbiAgICAgICAgdmFsdWVUZXh0OiB1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZVZhbHVlVGV4dCkgfHwgXCJcIixcbiAgICAgICAgc3ViVGV4dDogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVTdWJUZXh0KSB8fCBcIlwiLFxuICAgICAgICBpZDogXCJsaXN0LWl0ZW0tXCIgKyAoZGF0YURheS5pZCB8fCBqKSxcbiAgICAgICAga2V5OiBcImxpc3QtaXRlbS1cIiArIChkYXRhRGF5LmlkIHx8IGopLFxuICAgICAgICB0b29sdGlwOiB1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZVRvb2x0aXApIHx8IGxhYmVsLFxuICAgICAgICAvL2NvbG9ySWNvbjogXCJjLXJlZFwiLFxuICAgICAgICBsaW5rOiB1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZUxpbmspIHx8IG51bGwsXG4gICAgICAgIHN1ZmZpeDogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVTdWZmaXgpIHx8IFwiXCIsXG4gICAgICAgIC8vdmFsdWU6IEpTT04uc3RyaW5naWZ5KHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lSW5wdXQpKSB8fCB7fVxuICAgICAgfSk7XG4gICAgICAkaW5wdXRCb3guYXBwZW5kQ2hpbGQoJGVsSXRlbSk7XG4gICAgfSk7XG5cbiAgICBpZiAoJHNlYXJjaElucHV0KSB7XG4gICAgICAkc2VhcmNoSW5wdXRDbGVhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgJHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgICAgICAkaW5wdXRzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uXCIpIHx8IFtdO1xuICAgICAgICAkaW5wdXRzLmZvckVhY2goKCRpKSA9PiB7XG4gICAgICAgICAgbGV0IGxhYmVsID0gJGkuZ2V0QXR0cmlidXRlKFwibGFiZWxcIik7XG4gICAgICAgICAgbGV0IHNlYXJjaCA9ICRzZWFyY2hJbnB1dC52YWx1ZTtcbiAgICAgICAgICBpZiAobGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICRpLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkaS5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVkaXRCdXR0b24ub25DbGljaykge1xuICAgICAgbGV0IGJ1dHRvbiA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiYnV0dG9uLmVkaXQtYnRuXCIpO1xuICAgICAgaWYgKGJ1dHRvbiAmJiBwcm9wcy5lZGl0QnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+XG4gICAgICAgICAgcHJvcHMuZWRpdEJ1dHRvbi5vbkNsaWNrKHtcbiAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgICAgZGF5U2VsZWN0ZWQsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgICRlbGVtZW50OiAkZWwsXG4gICAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgJGl0ZW1zLmZvckVhY2goKCRpKSA9PiB7XG4gICAgICAgICRlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICBwcm9wcy5lZGl0QnV0dG9uLm9uQ2xpY2soe1xuICAgICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIGRhdGFEYXksXG4gICAgICAgICAgICBkYXlTZWxlY3RlZCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgJGVsZW1lbnQ6ICRlbCxcbiAgICAgICAgICAgIHRhYlNlbGVjdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAkZWw7XG4gIH0sXG5cbiAgY3JlYXRlRGF0YUxpc3RJdGVtKHtcbiAgICBsYWJlbCA9IFwiXCIsXG4gICAgdmFsdWVUZXh0ID0gXCJcIixcbiAgICBzdWJUZXh0ID0gXCJcIixcbiAgICBpZCA9IFwiXCIsXG4gICAga2V5ID0gXCJcIixcbiAgICB0b29sdGlwID0gXCJcIixcbiAgICBjb2xvckljb24gPSBcIlwiLFxuICAgIGxpbmsgPSBudWxsLFxuICAgIHN1ZmZpeCA9IG51bGwsXG4gICAgdmFsdWUgPSBcIlwiLFxuICB9KSB7XG4gICAgbGV0IHRvb2x0aXBTdHIgPSBcIlwiO1xuICAgIGxldCBpY29uU3RyID0gbnVsbDtcbiAgICBsZXQgbGlua1N0ciA9IFwiXCI7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICBpZiAodG9vbHRpcCkge1xuICAgICAgdG9vbHRpcFN0ciA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHt0b29sdGlwfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG5cbiAgICBpZiAoY29sb3JJY29uKSB7XG4gICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihpdGVtRm9ybWF0ZWQuY29sb3JJY29uKSkge1xuICAgICAgICBpY29uU3RyID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtjb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpY29uU3RyID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb24gJHtjb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmspIHtcbiAgICAgIGxpbmtTdHIgPSBgPGEgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJHtsaW5rfVwiPiR7aWNvbnMubGlua0ljb259PC9hPiBgO1xuICAgIH1cblxuICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uIGNsaWNrZWFibGUgJHtcbiAgICAgICAgICAgICAgaWNvblN0ciA/IFwiaGFzLWljb25cIiA6IFwiXCJcbiAgICAgICAgICAgIH0gXCIgXG4gICAgICAgICAgICAgICAgbGFiZWw9XCIke2xhYmVsfVwiIFxuICAgICAgICAgICAgICAgIGRhdGEtaWQ9XCIke2lkfVwiXG4gICAgICAgICAgICAgICAgZGF0YS1rZXk9XCIke2tleX1cIlxuICAgICAgICAgICAgICAgIGRhdGEtdmFsdWU9XCIke3ZhbHVlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAke2ljb25TdHIgfHwgXCJcIn1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tc3VidGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtzdWJUZXh0fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1jb250ZW50XCIgPlxuICAgICAgICAgICAgICAgICAgJHt2YWx1ZVRleHR9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4XCIgPlxuICAgICAgICAgICAgICAgICAgJHtzdWZmaXh9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAke2xpbmtTdHJ9XG5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgJHt0b29sdGlwU3RyfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICByZXR1cm4gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICB9LFxuXG4gIGNyZWF0ZUxpc3QocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdGFic0NvbnRhaW5lciA9IFwiXCI7XG5cbiAgICBpZiAocHJvcHMudGFicykge1xuICAgICAgbGV0IHRhYnMgPSBcIlwiO1xuICAgICAgcHJvcHMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgdGFicyArPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3gtdGFiXCIgdGFiLWtleT1cIiR7dGFiLmtleX1cIj5cbiAgICAgICAgICAke3RhYi5uYW1lfVxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSk7XG5cbiAgICAgIHRhYnNDb250YWluZXIgPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3gtdGFiLWNvbnRhaW5lclwiPlxuICAgICAgICAke3RhYnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICBsZXQgc2VhcmNoSW5wdXQgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICA8aW5wdXQgaWQ9XCJcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiYnVzY2FyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWFyY2gtaW5wdXQtY2xlYXJcIj5cbiAgICAgICAgICR7aWNvbnMuY2xvc2VJY29ufVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgJHt0YWJzQ29udGFpbmVyfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgICR7c2VhcmNoSW5wdXR9XG4gICAgICBgO1xuXG4gICAgLy9UT0RPIG9idGVuZXIgaW5wdXQgc2VndW4gZmlsYVxuICAgIGlmIChwcm9wcy5pbnB1dHMpIHtcbiAgICAgIHByb3BzLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmlzVGl0bGUpIHtcbiAgICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGljb24gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGkudG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtpLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgICAgICR7aS5zdWZmaXggPyBcIihcIiArIGkuc3VmZml4ICsgXCIpXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5jb2xvckljb24pIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGkuY29sb3JJY29uKSkge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uIGlzLXRpdGxlICAke1xuICAgICAgICAgICAgICBpY29uID8gXCJoYXMtaWNvblwiIDogXCJcIlxuICAgICAgICAgICAgfVwiIGlucHV0LXRhYi1rZXk9XCIke2kudGFiS2V5IHx8IFwiXCJ9XCIgbGFiZWw9XCIke2kubGFiZWx9XCI+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAke2ljb24gfHwgXCJcIn1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgJHtpLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB0b29sdGlwID0gXCJcIjtcbiAgICAgICAgICBsZXQgaWNvbiA9IG51bGw7XG4gICAgICAgICAgbGV0IGxpbmsgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGkudG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtpLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmNvbG9ySWNvbikge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoaS5jb2xvckljb24pKSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvblwiIHN0eWxlPVwiYmFja2dyb3VuZDoke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uICR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkubGluaykge1xuICAgICAgICAgICAgbGluayA9IGA8YSBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tbGlua1wiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke2kubGlua31cIj5cbiAgICAgICAgICAgICAgICAke2ljb25zLmxpbmtJY29ufVxuICAgICAgICAgICAgICAgIDwvYT4gYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbiAgJHtcbiAgICAgICAgICAgICAgaWNvbiA/IFwiaGFzLWljb25cIiA6IFwiXCJcbiAgICAgICAgICAgIH1cIiBpbnB1dC10YWIta2V5PVwiJHtpLnRhYktleSB8fCBcIlwifVwiIGxhYmVsPVwiJHtpLmxhYmVsfVwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG5cbiAgICAgICAgICAgICAgICAke2ljb259XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgJHtpLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4XCIgPiR7XG4gICAgICAgICAgICAgICAgICBpLnN1ZmZpeCA/IFwiKFwiICsgaS5zdWZmaXggKyBcIilcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAke2xpbmt9XG5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGFydFwiPiBzdGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVuZFwiPiBlbmQgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgJHt0b29sdGlwfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RyICs9IGBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj4gYDtcblxuICAgIGxldCAkZWwgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gICAgbGV0ICR0YWJzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaW5wdXQtYm94LXRhYlt0YWIta2V5XVwiKSB8fCBbXTtcbiAgICBsZXQgJHNlYXJjaElucHV0ID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0XCIpIHx8IG51bGw7XG4gICAgbGV0ICRzZWFyY2hJbnB1dENsZWFyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0LWNsZWFyXCIpIHx8IG51bGw7XG5cbiAgICAkdGFicy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdElucHV0Qm94VGFiKHQsICRlbCk7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICgkc2VhcmNoSW5wdXRDbGVhcikge1xuICAgICAgJHNlYXJjaElucHV0Q2xlYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoJHNlYXJjaElucHV0KSB7XG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgJHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgJHRhYlNlbGVjdGVkID1cbiAgICAgICAgICAkZWwucXVlcnlTZWxlY3RvcihcIi5pbnB1dC1ib3gtdGFiW3RhYi1rZXldLmFjdGl2ZVwiKSB8fCBudWxsO1xuICAgICAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgICAgICBpZiAoJHRhYlNlbGVjdGVkKSB7XG4gICAgICAgICAgbGV0IHRhYktleSA9ICR0YWJTZWxlY3RlZC5nZXRBdHRyaWJ1dGUoXCJ0YWIta2V5XCIpO1xuICAgICAgICAgICRpbnB1dHMgPVxuICAgICAgICAgICAgJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgIFwiLm1pbmktaW5wdXQtc2VjdGlvbltpbnB1dC10YWIta2V5PSdcIiArIHRhYktleSArIFwiJ11cIlxuICAgICAgICAgICAgKSB8fCBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaW5wdXRzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uXCIpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgICRpbnB1dHMuZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSAkaS5nZXRBdHRyaWJ1dGUoXCJsYWJlbFwiKTtcbiAgICAgICAgICBsZXQgc2VhcmNoID0gJHNlYXJjaElucHV0LnZhbHVlO1xuICAgICAgICAgIGlmIChsYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdElucHV0Qm94VGFiKF8uZmlyc3QoJHRhYnMpLCAkZWwpO1xuXG4gICAgcmV0dXJuICRlbDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dEJveCwgY29tbyBlbGVtZW50byBEb21cbiAgICogdW4gSW5wdXRCb3ggZXMgdW4gY29udGVuZWRvciBjb24gdW5hIGxpc3RhIGRlIGlucHV0c1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRCb3gocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBbXTtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuXG4gICAgbGV0IHRhYnNDb250YWluZXIgPSBcIlwiO1xuXG4gICAgaWYgKHByb3BzLnRhYnMpIHtcbiAgICAgIGxldCB0YWJzID0gXCJcIjtcbiAgICAgIHByb3BzLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIHRhYnMgKz0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94LXRhYlwiIHRhYi1rZXk9XCIke3RhYi5rZXl9XCI+XG4gICAgICAgICAgJHt0YWIubmFtZX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuXG4gICAgICB0YWJzQ29udGFpbmVyID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94LXRhYi1jb250YWluZXJcIj5cbiAgICAgICAgJHt0YWJzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgbGV0IHNlYXJjaElucHV0ID0gYFxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgPGlucHV0IGlkPVwiXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cImJ1c2NhclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VhcmNoLWlucHV0LWNsZWFyXCI+XG4gICAgICAgICAke2ljb25zLmNsb3NlSWNvbn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuXG4gICAgbGV0IHN0ciA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJ9IFwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICB9XCI+XG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICR7dGFic0NvbnRhaW5lcn1cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveCBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICAke3NlYXJjaElucHV0fVxuICAgICAgYDtcblxuICAgIGlmIChwcm9wcy5pbnB1dHMpIHtcbiAgICAgIHByb3BzLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmlzVGl0bGUpIHtcbiAgICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGljb24gPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGkudG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtpLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgICAgICR7aS5zdWZmaXggPyBcIihcIiArIGkuc3VmZml4ICsgXCIpXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5jb2xvckljb24pIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGkuY29sb3JJY29uKSkge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uIGlzLXRpdGxlXCIgaW5wdXQtdGFiLWtleT1cIiR7XG4gICAgICAgICAgICAgIGkudGFiS2V5IHx8IFwiXCJcbiAgICAgICAgICAgIH1cIiBsYWJlbD1cIiR7aS5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICR7aWNvbn1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgJHtpLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB2YWx1ZV9mb3VuZCA9IHZhbHVlID8gdmFsdWUuZmluZCgodmFsKSA9PiB2YWwuaWQgPT0gaS5pZCkgOiBudWxsO1xuICAgICAgICAgIGxldCB2ID0gdmFsdWVfZm91bmQgfHwgXCJcIjtcbiAgICAgICAgICBsZXQgaW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICBwcm9wcy52YXJOYW1lSW5wdXQgJiYgdltwcm9wcy52YXJOYW1lSW5wdXRdXG4gICAgICAgICAgICAgID8gdltwcm9wcy52YXJOYW1lSW5wdXRdXG4gICAgICAgICAgICAgIDogdi52YWx1ZTtcbiAgICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGljb24gPSBcIlwiO1xuICAgICAgICAgIGxldCBsaW5rID0gXCJcIjtcblxuICAgICAgICAgIGlmIChpLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRvb2x0aXAgPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICR7aS50b29sdGlwfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5jb2xvckljb24pIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGkuY29sb3JJY29uKSkge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmxpbmspIHtcbiAgICAgICAgICAgIGxpbmsgPSBgPGEgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJHtpLmxpbmt9XCI+XG4gICAgICAgICAgICAgICAgJHtpY29ucy5saW5rSWNvbn1cbiAgICAgICAgICAgICAgICA8L2E+IGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgICAgaWNvbiA/IFwiaGFzLWljb25cIiA6IFwiXCJcbiAgICAgICAgICAgIH1cIiBpbnB1dC10YWIta2V5PVwiJHtpLnRhYktleSB8fCBcIlwifVwiIGxhYmVsPVwiJHtpLmxhYmVsfVwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWluaS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQtaWQ9XCIke2kuaWQgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7aS5rZXkgfHwgaS5sYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtpbnB1dFZhbHVlIHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgICAgICAke2ljb24gfHwgXCJcIn1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAke2kubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1zdWZmaXhcIiA+JHtcbiAgICAgICAgICAgICAgICAgIGkuc3VmZml4ID8gXCIoXCIgKyBpLnN1ZmZpeCArIFwiKVwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH08L2Rpdj5cblxuICAgICAgICAgICAgICAgICR7bGlua31cblxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdHIgKz0gYFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PiBgO1xuXG4gICAgbGV0ICRlbCA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICBsZXQgJHRhYnMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5pbnB1dC1ib3gtdGFiW3RhYi1rZXldXCIpIHx8IFtdO1xuICAgIGxldCAkaW5wdXRzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dC5taW5pLWlucHV0XCIpIHx8IFtdO1xuICAgIGxldCAkc2VhcmNoSW5wdXQgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXRcIikgfHwgbnVsbDtcbiAgICBsZXQgJHNlYXJjaElucHV0Q2xlYXIgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXQtY2xlYXJcIikgfHwgbnVsbDtcblxuICAgICR0YWJzLmZvckVhY2goKHQpID0+IHtcbiAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5wdXRCb3hUYWIodCwgJGVsKTtcbiAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCRzZWFyY2hJbnB1dENsZWFyKSB7XG4gICAgICAkc2VhcmNoSW5wdXRDbGVhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgkc2VhcmNoSW5wdXQpIHtcbiAgICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICAgIGxldCAkdGFiU2VsZWN0ZWQgPVxuICAgICAgICAgICRlbC5xdWVyeVNlbGVjdG9yKFwiLmlucHV0LWJveC10YWJbdGFiLWtleV0uYWN0aXZlXCIpIHx8IG51bGw7XG4gICAgICAgIGxldCAkaW5wdXRzID0gW107XG4gICAgICAgIGlmICgkdGFiU2VsZWN0ZWQpIHtcbiAgICAgICAgICBsZXQgdGFiS2V5ID0gJHRhYlNlbGVjdGVkLmdldEF0dHJpYnV0ZShcInRhYi1rZXlcIik7XG4gICAgICAgICAgJGlucHV0cyA9XG4gICAgICAgICAgICAkZWwucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgXCIubWluaS1pbnB1dC1zZWN0aW9uW2lucHV0LXRhYi1rZXk9J1wiICsgdGFiS2V5ICsgXCInXVwiXG4gICAgICAgICAgICApIHx8IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpbnB1dHMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5taW5pLWlucHV0LXNlY3Rpb25cIikgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgJGlucHV0cy5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgIGxldCBsYWJlbCA9ICRpLmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgICAgICAgIGxldCBzZWFyY2ggPSAkc2VhcmNoSW5wdXQudmFsdWU7XG4gICAgICAgICAgaWYgKGxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAkaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0SW5wdXRCb3hUYWIoXy5maXJzdCgkdGFicyksICRlbCk7XG5cbiAgICAkaW5wdXRzLmZvckVhY2goKGkpID0+IHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGksICRlbCwgcHJvcHMpKTtcblxuICAgIHJldHVybiAkZWw7XG4gIH0sXG5cbiAgc2VsZWN0SW5wdXRCb3hUYWIoJHRhYiwgJGVsKSB7XG4gICAgbGV0ICR0YWJzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaW5wdXQtYm94LXRhYlt0YWIta2V5XVwiKSB8fCBbXTtcbiAgICBsZXQgJGlucHV0U2VjdGlvbnMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5taW5pLWlucHV0LXNlY3Rpb25cIikgfHwgW107XG5cbiAgICAkdGFicy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICB0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgfSk7XG5cbiAgICBpZiAoJHRhYikge1xuICAgICAgJHRhYi5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG4gICAgICAkaW5wdXRTZWN0aW9ucy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LXRhYi1rZXlcIik7XG4gICAgICAgIGlmIChrZXkgPT0gJHRhYi5nZXRBdHRyaWJ1dGUoXCJ0YWIta2V5XCIpKSB7XG4gICAgICAgICAgaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQ2hlY2tib3gsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dENoZWNrYm94KHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuICAgIGxldCByID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgICAgIH1cIiAke3ZhbHVlID8gXCJjaGVja2VkXCIgOiBcIlwifT5cbiAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+YCk7XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICBjcmVhdGVJbnB1dEJ1dHRvbnNHcm91cChwcm9wcykge1xuICAgIGxldCAkY29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1ncm91cFwiPiA8L2Rpdj5cbiAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0ICRjb250YWluZXJCdXR0b25Hcm91cCA9ICRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5idXR0b25zLWdyb3VwXCIpO1xuXG4gICAgbGV0ICRidXR0b25zID0gW107XG4gICAgJGJ1dHRvbnMgPSBwcm9wcy5idXR0b25zLm1hcCgoYnV0dG9uUHJvcCkgPT4ge1xuICAgICAgbGV0IGJ1dHRvblN0ciA9IGBcbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICBuYW1lPVwiJHtidXR0b25Qcm9wLmtleSB8fCBcIlwifVwiIFxuICAgICAgICAgIGlucHV0LWtleT1cIiR7YnV0dG9uUHJvcC5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgIGNsYXNzPVwiY2FwLWJ0bi1vdXRsaW5lIGNhcC1idG4tc20gJHtcbiAgICAgICAgICAgIGJ1dHRvblByb3AuaXNTZWxlY3RlZCA/IFwic2VsZWN0ZWRcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiPlxuICAgICAgICAgICR7YnV0dG9uUHJvcC5sYWJlbH1cbiAgICAgICAgPC9idXR0b24+YDtcblxuICAgICAgbGV0ICRidXR0b24gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGJ1dHRvblN0cik7XG4gICAgICAkY29udGFpbmVyQnV0dG9uR3JvdXAuYXBwZW5kKCRidXR0b24pO1xuXG4gICAgICAkYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuaXNTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgJGJ1dHRvbnMuZm9yRWFjaCgoJGIpID0+ICRiLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3RlZFwiKSk7XG4gICAgICAgICAgJGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uUHJvcC5vbkNsaWNrKHsgcHJvcHMsIGV2ZW50OiBlLCBidXR0b25zRWxlbWVudHM6ICRidXR0b25zIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gJGJ1dHRvbjtcbiAgICB9KTtcblxuICAgIHJldHVybiAkY29udGFpbmVyO1xuICB9LFxuXG4gIGNyZWF0ZUlucHV0QnV0dG9uKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJ9IFwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICB9XCI+XG4gICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgIG5hbWU9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICBjbGFzcz1cImNhcC1idG4tb3V0bGluZVwiPlxuICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0IGJ1dHRvbiA9IHIucXVlcnlTZWxlY3RvcihcImJ1dHRvblwiKTtcbiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PlxuICAgICAgcHJvcHMub25DbGljayh7IHByb3BzLCBldmVudDogZSwgZGF0YURheSB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICBhZGRLZXlEb3duSW5wdXRFdmVudHMoJGlucHV0LCAkaW5wdXRDb250YWluZXIsIHByb3BzKSB7XG4gICAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIC8vRU5URVJcbiAgICAgICAgJGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2F2ZU11bHRpSW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgLy9FU0NcbiAgICAgICAgJGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2FuY2VsTXVsdGlJbnB1dFwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAkaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICBpZiAocHJvcHMub25JbnB1dCkge1xuICAgICAgICBwcm9wcy5vbklucHV0KHtcbiAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICB2YWx1ZTogZS5zcmNFbGVtZW50LnZhbHVlLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICRlbGVtZW50OiAkaW5wdXRDb250YWluZXIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIGNyZWF0ZUNvbnRleHRNZW51KHtcbiAgICBjb25maWcsXG4gICAgdGFyZ2V0LFxuICAgICRjYXBpYmFyYUVsZW0gPSBudWxsLFxuICAgIGV2dCA9IG51bGwsXG4gICAgZGF0ZSA9IG51bGwsXG4gICAgaXRlbSA9IG51bGwsXG4gICAgc2VsZWN0ZWQgPSBbXSxcbiAgICB0YWJTZWxlY3RlZCA9IG51bGwsXG4gICAgbGVmdCA9IG51bGwsXG4gICAgdG9wID0gbnVsbCxcbiAgICBuYW1lID0gXCJcIixcbiAgfSkge1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5jb250ZXh0TWVudSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBjb25maWcudGltZWxpbmUuY29udGV4dE1lbnUub3B0aW9ucyA9PSB1bmRlZmluZWRcbiAgICApXG4gICAgICByZXR1cm4geyBlbGVtOiBudWxsLCBpc1Zpc2libGU6IGZhbHNlIH07XG5cbiAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICBsZXQgc3R5bGUgPSBcIlwiO1xuICAgIGxldCBzdHJIdG1sID0gXCJcIjtcbiAgICBsZXQgbGVmdFBvc2l0aW9uID0gbnVsbDtcbiAgICBsZXQgdG9wUG9zaXRpb24gPSBudWxsO1xuICAgIGxldCBpc1Zpc2libGUgPSB0cnVlO1xuICAgIGxldCBib3VuZFJlY3RDYXBpYmFyYSA9IG51bGw7XG4gICAgbGV0IGdhcCA9IDE1OyAvL3B4XG5cbiAgICBpZiAoJGNhcGliYXJhRWxlbSkge1xuICAgICAgYm91bmRSZWN0Q2FwaWJhcmEgPSAkY2FwaWJhcmFFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cblxuICAgIGlmIChldnQgJiYgYm91bmRSZWN0Q2FwaWJhcmEpIHtcbiAgICAgIGxlZnQgPSBldnQuY2xpZW50WDtcbiAgICAgIHRvcCA9IGV2dC5jbGllbnRZIC0gYm91bmRSZWN0Q2FwaWJhcmEudG9wO1xuICAgIH1cblxuICAgIGlmIChsZWZ0KSB7XG4gICAgICBsZWZ0UG9zaXRpb24gPSBsZWZ0O1xuICAgIH1cblxuICAgIGlmICh0b3ApIHtcbiAgICAgIHRvcFBvc2l0aW9uID0gdG9wO1xuICAgIH1cblxuICAgIGlmICgobGVmdFBvc2l0aW9uICE9PSBudWxsKSAmICh0b3BQb3NpdGlvbiAhPT0gbnVsbCkpIHtcbiAgICAgIGlmIChib3VuZFJlY3RDYXBpYmFyYSkge1xuICAgICAgICBsZXQgdHJhbnNmb3JtU3R5bGUgPSBcIlwiO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdG9wUG9zaXRpb24gPiAoYm91bmRSZWN0Q2FwaWJhcmEuaGVpZ2h0ICogMikgLyA2ICYmXG4gICAgICAgICAgdG9wUG9zaXRpb24gPD0gKGJvdW5kUmVjdENhcGliYXJhLmhlaWdodCAqIDQpIC8gNlxuICAgICAgICApIHtcbiAgICAgICAgICB0cmFuc2Zvcm1TdHlsZSArPSBgdHJhbnNsYXRlWSgtNTAlKWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcFBvc2l0aW9uID4gKGJvdW5kUmVjdENhcGliYXJhLmhlaWdodCAqIDQpIC8gNikge1xuICAgICAgICAgIHRyYW5zZm9ybVN0eWxlICs9IGB0cmFuc2xhdGVZKC0xMDAlKWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGVmdFBvc2l0aW9uID4gKGJvdW5kUmVjdENhcGliYXJhLndpZHRoICogNCkgLyA2KSB7XG4gICAgICAgICAgdHJhbnNmb3JtU3R5bGUgKz0gYHRyYW5zbGF0ZVgoLTEwMCUpYDtcbiAgICAgICAgICBsZWZ0UG9zaXRpb24gLT0gZ2FwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnRQb3NpdGlvbiArPSBnYXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYW5zZm9ybVN0eWxlICE9IFwiXCIpIHtcbiAgICAgICAgICBzdHlsZSArPSBgIHRyYW5zZm9ybTogJHt0cmFuc2Zvcm1TdHlsZX07YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHlsZSArPSBgdG9wOiAke3RvcFBvc2l0aW9ufXB4OyBsZWZ0OiAke2xlZnRQb3NpdGlvbn1weDtgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCJjbS1oaWRlXCI7XG4gICAgICBpc1Zpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzdHJIdG1sICs9IGAgPGRpdiBjbGFzcz1cImNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyICR7Y2xhc3NOYW1lfVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWNvbnRleHQtbWVudVwiIHN0eWxlPVwiJHtzdHlsZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICBsZXQgJGNvbnRleHRNZW51Q29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHJIdG1sKTtcbiAgICBsZXQgJGNvbnRleHRNZW51ID0gJGNvbnRleHRNZW51Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuY2FwLWNvbnRleHQtbWVudVwiKTtcbiAgICBsZXQgaGFzU29tZW9wdGlvbiA9IGZhbHNlO1xuXG4gICAgY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51Lm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uLnNob3dJZikge1xuICAgICAgICBsZXQgc2hvdyA9IG9wdGlvbi5zaG93SWYoeyBpdGVtLCBkYXRlLCBzZWxlY3RlZCwgbmFtZSwgdGFiU2VsZWN0ZWQgfSk7XG4gICAgICAgIGlmICghc2hvdykgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGxldCBpc0NsaWNrZWFibGUgPSB0cnVlO1xuICAgICAgaWYgKG9wdGlvbi5lbmFibGVJZikge1xuICAgICAgICBpc0VuYWJsZWQgPSBvcHRpb24uZW5hYmxlSWYoe1xuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHRhYlNlbGVjdGVkLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IG9wdGlvbkNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICBsZXQgc3RySWNvbiA9IFwiXCI7XG4gICAgICBsZXQgbGFiZWwgPSBcIlwiO1xuXG4gICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICBvcHRpb25DbGFzc05hbWUgKz0gXCJpcy1kaXNhYmxlZCBcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbi5pc0RpdmlkZXIpIHtcbiAgICAgICAgaXNDbGlja2VhYmxlID0gZmFsc2U7XG4gICAgICAgIG9wdGlvbkNsYXNzTmFtZSArPSBcImlzLWRpdmlkZXIgXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb24ubGFiZWwpIHtcbiAgICAgICAgbGFiZWwgPSBgPHNwYW4+JHtvcHRpb24ubGFiZWx9PC9zcGFuPmA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb24uaWNvbikge1xuICAgICAgICBzdHJJY29uID0gYDxkaXYgY2xhc3M9XCJjYXAtY29udGV4dC1tZW51X2l0ZW1faWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIiR7b3B0aW9uLmljb259XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG5cbiAgICAgIGxldCBvcHRpb25TdHJIdG1sID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWNvbnRleHQtbWVudV9pdGVtICR7b3B0aW9uQ2xhc3NOYW1lfVwiPlxuICAgICAgICAgICR7c3RySWNvbn1cbiAgICAgICAgICAke2xhYmVsfVxuICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBsZXQgJG9wdGlvbiA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwob3B0aW9uU3RySHRtbCk7XG5cbiAgICAgIGlmIChpc0VuYWJsZWQgJiYgaXNDbGlja2VhYmxlKSB7XG4gICAgICAgICRvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldnRDbGljaykgPT5cbiAgICAgICAgICBvcHRpb24ub25DbGljayh7XG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBldnQ6IGV2dENsaWNrLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIHRhYlNlbGVjdGVkLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkb3B0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZ0Q2xpY2spID0+IHtcbiAgICAgICAgICBldnRDbGljay5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2dENsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgJGNvbnRleHRNZW51LmFwcGVuZCgkb3B0aW9uKTtcbiAgICAgIGhhc1NvbWVvcHRpb24gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW06ICRjb250ZXh0TWVudUNvbnRhaW5lcixcbiAgICAgIGlzVmlzaWJsZSxcbiAgICB9O1xuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBUUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBUEE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBUUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBUUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBUUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUhBO0FBV0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFTQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBVUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFJQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3Q0E7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3Q0E7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTtBQStDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFIQTtBQVdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUhBO0FBYUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUhBO0FBWUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBSEE7QUFhQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBV0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBVUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBT0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQWxFQTtBQUNBO0FBb0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBU0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUExa0pBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/util/tableElements.js\n");
|
|
259
259
|
|
|
260
260
|
/***/ }),
|
|
261
261
|
|